Свойства класса 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
Мои геттеры и сеттеры выглядят так для каждого свойства:
function get_mdId(){
return $this->mdId;
}
function set_mdId($id){
$this->mdId=$id;
}
И предложения или идеи?
-tu
1 ответ
Объекты передаются по ссылке. Это означает, что когда вы изменяете значение, это значение будет меняться везде, где вы использовали этот объект.
Поскольку вы храните один и тот же объект каждый раз - $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);
}