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;

代わりに、私のコードを実行すると、 getElementByName を呼び出す前と同じように、のactiveプロパティはまだ false です。$elements['foo1']

関数は要素の「コピー」を作成すると思いますが、配列の実際の要素を取得するにはどうすればよいですか。それを変更してから配列でアクセスすると、その値が変更されますか?

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 に答える