3

我有这样的课:

class Foo {
    $elements = array();

    function getElementByName($name) {
        foreach($this->elements as $elm) {
            if ($elm->name == $name) {
                return $elm;
            }
        }
    }
}

我希望以下代码可以修改我的数组元素:

$myFoo = new Foo();
$myFoo->getElementByName('foo1')->active = true;

相反,在运行我的代码时, 的active属性$elements['foo1']仍然是错误的,因为它是在调用 getElementByName 之前

我认为该函数对元素进行了“复制”,我怎样才能得到数组的真实元素,这样当我修改它,然后在数组中访问它时,它的值已经改变了?

4

2 回答 2

3

返回对它的引用(注意&):

function &getElementByName($name) { ... }
于 2013-10-13T10:55:27.130 回答
1

返回对元素的引用:

function &getElementByName($name) { // & returns by reference
    foreach($this->elements as $elm) {
        if ($elm->name == $name) {
            return $elm;
        }
    }
}

从 PHP 5 开始,对象默认通过引用传递。

于 2013-10-13T10:57:23.990 回答