对此可能有一个非常简单的解释,但是我已经使用了几个月的代码,现在突然间它不起作用。
我从表中检索所有行。我有和对象是我正在选择的表的实体模型。当我从关联结果数组中读取行时,我使用“$ 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 :(得分: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);
}