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"); } } $b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
當執行 Bar::test() 方法時,它會變更 Foo 物件陣列中第五個物件的值。此變更反映在原始物件中,如輸出所示:
Foo #5 My value has now changed
此行為是由於將物件參考指派給 $testFoo 變數所致。變數直接指向對象,因此透過變數所做的任何修改都會反映在原始對像中。
要按值而不是引用來分配對象,可以使用克隆關鍵字:
<code class="php">$testFoo = clone $this->getFoo(5);</code>
以上是PHP 物件使用值分配還是引用分配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!