0

クラスのプロパティを使用できるように戻したいだけです。私のプロジェクトでは、mysql テーブル データのすべての結果を取得して返したいと考えています。うまく機能しますが、戻りデータを変更すると、以下に示すエラーメッセージが表示されます。

   Trying to get property of non-object in E:\xampp\htdocs\myProject\new_27_03\login_con.php on line 26

私のコード::

nonClass.php

 <?php
      $doc = new Dortor();  // object  

      $doc->result("SELECT * FROM doctor");   // function call

      foreach( $doc as $doctor ) {
         echo $doctor->doc_name;     // error msg: Trying to get property of non-object in
                                   //E:\xampp\htdocs\myProject\new_27_03\login_con.php on line 26
      }
  ?>

dotor.php

  <?php
     class Dortor extends DatabaseObject {
       public $table_name = "doctor";
       public $id;
       public $doc_name;
       public $doc_pass;
       public $doc_img;     // image directory

       public function result($sql="") { 
         $result = $database->query($sql);  // run query from mysql database

         $result_array = array();   
         while( $row = $database->fetch_array($result)  ) {  // this while loop return actual result
             $result_array[] = $this->get_table_value($row);
         }
         return $result_array;
        }
     }
  ?>

データベースオブジェクト.php

  <?php
       class DatabaseObject {
           public function get_table_value($record) {
              $className = get_called_class();  // get the class name
              $object = new $className;       // object call

              $arrayValue = array();  
              $i=0;   // inital array position
              foreach( $object as $key => $value )  {
                  $arrayValue[$i] = $key;  // get the class's object attributes
                  $i++;
              } 

              $i = 1;
             foreach ($record as $key => $value) {   // fetch the database result
                 if(array_key_exists($key, $arrayValue) ) {  // check if database's column name is exist on 'arrayValue' array,
                    $object->$arrayValue[$i] = $value;  //  if exist then, store value in 'Doctor' class's object attributes
                    $i++;
                 }
              } 
             return $object;
          }
       }
  ?>
4

2 に答える 2

0

あなたのエラーはおそらくここにあります:

$doc = new Dortor();  // object  
$docs = $doc->result("SELECT * FROM doctor");   // you forgot to assign the result
foreach ($docs as $doctor) { // was looping over $doc here, instead of the result
   echo $doctor->doc_name;
}
于 2013-03-29T23:53:59.447 に答える
0

foreach ループが開始する前に、正しい変数の型をチェックすることも理にかなっています。

if ( is_array( $doc)  )
{
 foreach( $doc as $doctor ) 
  {
    // foreach code
  }
}
else
{
  echo '$doc is no valid object';
  var_dump($doc);
}

それが問題なのです。

于 2013-03-29T23:57:57.163 に答える