ホームページ  >  記事  >  バックエンド開発  >  参照による代入は PHP でのオブジェクトの変更に影響しますか?

参照による代入は PHP でのオブジェクトの変更に影響しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-22 07:22:02792ブラウズ

Does Assignment by Reference Affect Object Modification in PHP?

PHP でのオブジェクト割り当ての決定

PHP プログラミングでは、オブジェクトは値または参照によって割り当てることができます。この区別は、オブジェクトに加えられた変更がコードの他の部分にどのように反映されるかに影響します。

次のコードを考えてみましょう。

<code class="php">class Foo {
    var $value;

    function foo($value) {
        $this->setValue($value);
    }

    function setValue($value) {
        $this->value = $value;
    }
}

class Bar {
    var $foos = array();

    function Bar() {
        for ($x = 1; $x <= 10; $x++) {
            $this->foos[$x] = new Foo("Foo # $x");
        }
    }

    function getFoo($index) {
        return $this->foos[$index];
    }

    function test() {
        $testFoo = $this->getFoo(5);
        $testFoo->setValue("My value has now changed");
    }
}</code>

疑問が生じます。「Bar::test( )" メソッドが実行されると、"Foo" オブジェクトの配列内の "foo # 5" を変更すると、実際の "foo # 5" オブジェクト自体に影響を及ぼしますか、それとも別のローカル変数 "testFoo" を作成しますか?

答え:

答えを判断するには、コードを実行して出力を観察します:

<code class="php">$b = new Bar;
echo $b->getFoo(5)->value;
$b->test();
echo $b->getFoo(5)->value;</code>

上記のコードの出力は次のようになります:

Foo #5
My value has now changed

これは、「testFoo」オブジェクトに加えられた変更が、配列内の実際の「foo # 5」オブジェクトに影響を与えることを示します。この動作は、PHP 5 の「参照による代入」の概念に起因しており、デフォルトでオブジェクトに適用されます。

影響:

参照による代入により、後続のオブジェクトへの変更はコード全体に反映されます。ただし、オブジェクトの独立したコピーを作成したい場合は、「clone」キーワードを利用して値ベースの割り当てを実行できます。

以上が参照による代入は PHP でのオブジェクトの変更に影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。