確定 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中文網其他相關文章!