PHP - 在对象数组中丢失了引用?

时间:2013-08-07 14:46:35

标签: php arrays object reference

我有一个存储一些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);

数组中的对象没有被更改。

2 个答案:

答案 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,它没有链接。