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 サイトの他の関連記事を参照してください。