我有一个存储一些Employee Objects的数组 即
var $this->employeeArray = array();
$this->employeeArray[] = $empObjectA;
$this->employeeArray[] = $empObjectB;
...
哪个Employee对象有id,firstName,lastName等。 我还有一个函数来搜索具有特定ID的员工对象。即:
public function searchArrayByID($id) {
$targetObject = null;
foreach($this->employeeArray as $e) {
if ($id == $e->id) {
$targetObject = $e;
break;
}
}//foreach
return $targetObject;
}
但是当我这样做时:
$targetEmployee = $this->searchArrayByID(1);
$targetEmployee->firstName = "someOtherName";
并做一个
print_r($this->employeeArray);
数组中的对象没有被更改。
答案 0 :(得分:2)
试试这个,前面加&
,它会传递引用。
我还简化了你的搜索功能。
因为我不知道为什么它不适合你,因为它在2个不同的服务器上为我工作而没有任何&
我可以建议'最安全'的方法=>尽可能强制参考
$this->employeeArray[] = &$empObjectA; // here
public function &searchArrayByID($id) { // here
foreach($this->employeeArray as &$e) { // and here
if ($id == $e->id) return $e;
}
return null;
}
$targetEmployee = $this->searchArrayByID(1);
现在,如果它不起作用,我怀疑你的代码中有另一个错误,因为这里强制每个引用
有趣的是。我在这里试了一下:http://phpfiddle.org/main/code/2cv-pt2 并且使用那个php版本,它没有任何区别(这就是应该如何)。 您使用的是哪个php版本?因为PHP在处理引用方面做得更好(减少不需要的/不必要的副本)答案 1 :(得分:0)
那是因为PHP将对象复制到$ targetEmployee,它没有链接。