当我存储到数组时,PHP类属性被覆盖

时间:2012-11-20 01:02:56

标签: php class this-pointer

对此可能有一个非常简单的解释,但是我已经使用了几个月的代码,现在突然间它不起作用。

我从表中检索所有行。我有和对象是我正在选择的表的实体模型。当我从关联结果数组中读取行时,我使用“$ this-> propertyName”存储每个属性,然后我将每个对象推送到一个数组。在我最终得到一个对象数组之前,现在我最终得到了一个重复相同对象的数组。这是一段代码:

     $mdSelectALL_sql="SELECT * FROM member_data";

     $mdSelectALL=mysql_query($mdSelectALL_sql,$mdConn);

     if(!$mdSelectALL){
            die('Error: ' . mysql_error());
     }
     else{
            echo "RETURNING ALL MEMBER DATA RECORDS!!!<br>";

            //store all records into array
            while($row=mysql_fetch_array($mdSelectALL))
            {


                    $this->mdId=$row['md_id'];
                    $this->mdFname=$row['md_fname'];
                    $this->mdLname=$row['md_lname'];
                    $this->mdEmail=$row['md_email'];
                    $this->mdTwitter=$row['md_twitter'];
                    $this->mdFacebook=$row['md_facebook'];
                    $this->mdMyspace=$row['md_myspace'];
                    $this->mdPhoneNumber=$row['md_phonenumber'];
                    $this->mdNotes=$row['md_notes'];



                    //store records in array
                    array_push($mdArray,$this);

           }//end while

           // print_r($mdArray); prints the array and each element is the last record  encountered in the SQL retrieval

            return $mdArray;

            }//end else

我的getter和setter对于每个属性都是这样的:

       function get_mdId(){
              return $this->mdId;
       }

       function set_mdId($id){
             $this->mdId=$id;
       }

建议或想法?

-TU

1 个答案:

答案 0 :(得分:0)

对象通过引用传递。这意味着当您更改值时,该值将在您使用该对象的任何位置发生更改。

当你每次都存储同一个对象 - $this时 - 你最终会得到一个对同一个对象的引用数组。

要解决它,你可以这样做:

$mdArray = array();
while($row=mysql_fetch_array($mdSelectALL))
{
   $tmp_object = new MyObject;   // fill in the name of your object...

   $tmp_object->mdId=$row['md_id'];
   ...

   array_push($mdArray, $tmp_object);
}