PHP でのオブジェクトの割り当てを理解する: 値と参照
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
説明
PHP は次の方法でオブジェクトを割り当てます。バージョン 5 ではデフォルトで参照されます。これは、foo # 5 オブジェクトが getFoo() によって返されるとき、同じオブジェクトへの参照が $testFoo 変数に格納されることを意味します。
したがって、setValue() $testFoo でメソッドが呼び出されると、単なるローカル コピーではなく、配列内の実際の foo # 5 オブジェクトが変更されます。これが、Bar::test() メソッドの実行後でも foo # 5 の値が変化する理由です。
値による代入に関する注意
必要に応じて、 clone キーワードを使用すると、参照ではなく値でオブジェクトを割り当てることができます:
<code class="php">$testFoo = clone $this->getFoo(5); $testFoo->setValue("My value has now changed");</code>
以上が代入動作は PHP のオブジェクトにどのような影響を及ぼしますか: 値と参照?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。