2012-11-20 69 views
0

對此可能有一個非常簡單的解釋,但是我已經將這段代碼工作了幾個月,現在突然間它現在不工作。當我存儲到數組時,PHP類的屬性被覆蓋

我檢索表中的所有行。我有和對象哪一個是我從中選擇的表的實體模型。當我讀取關聯結果數組中的行時,我使用「$ 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

回答

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); 
} 
+0

這做到了爵士。謝謝。我認爲是這樣,但我不確定這是如何工作的,因爲我這樣做的方法是實例化臨時對象的同一類的成員。 –