[請益] 沒用 = & 卻有 reference 的效果?

看板PHP作者 (陸奧鬼一)時間12年前 (2011/12/23 21:52), 編輯推噓2(2010)
留言12則, 6人參與, 最新討論串1/1
<php class Item { var $name; function __construct($name) { $this->name = $name; } } class Box { var $items; function __construct() { $this->items = array(); } function replace() { $_items = $this->items; print_r($this->items); $_items[0]->name = 'A'; print_r($this->items); /* 明明異動的是 $_items 裡的值, 但是 $this->items 也同步異動了。 是否有高人可以指點迷津?謝謝。 */ } } $BBB = new Box(); $BBB->items[] = new Item('a'); $BBB->items[] = new Item('b'); $BBB->items[] = new Item('c'); $BBB->replace(); ?> 會得到以下的結果: Array ( [0] => Item Object ( [name] => a ) [1] => Item Object ( [name] => b ) [2] => Item Object ( [name] => c ) ) Array ( [0] => Item Object ( [name] => A ) [1] => Item Object ( [name] => b ) [2] => Item Object ( [name] => c ) ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.49.163

12/23 22:16, , 1F
PHP的物件要想成C/C++的指標
12/23 22:16, 1F

12/23 22:19, , 3F
解決你的問題要用 $_item=clone $this->items ;
12/23 22:19, 3F

12/23 22:22, , 4F
我發現我第一行有語病XD.....C沒有物件
12/23 22:22, 4F

12/23 22:35, , 5F

12/24 20:37, , 6F
PHP 物件模型跟 Java 一樣任何物件都是 pointer
12/24 20:37, 6F

12/25 12:22, , 7F
我沒記錯的話,php5是改成by reference的。
12/25 12:22, 7F

12/28 03:20, , 8F
樓上說的沒錯, PHP5 開始 object 預設是 call by reference
12/28 03:20, 8F

12/28 03:23, , 9F
主要是你傳遞過程中都是在傳遞物件,換言之就是傳參考,所以
12/28 03:23, 9F

12/28 03:23, , 11F
啊,沒看到一樓大德已經推了一樣的網址… XD
12/28 03:23, 11F

12/29 11:59, , 12F
瞭解,感謝各位大德的講解。
12/29 11:59, 12F
文章代碼(AID): #1Ez8U9Ur (PHP)