看板 PHP 關於我們 聯絡資訊
<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
bibo9901:PHP的物件要想成C/C++的指標 12/23 22:16
bibo9901:解決你的問題要用 $_item=clone $this->items ; 12/23 22:19
bibo9901:我發現我第一行有語病XD.....C沒有物件 12/23 22:22
gname:http://tinyurl.com/7dea3yo 12/23 22:35
kornelius:PHP 物件模型跟 Java 一樣任何物件都是 pointer 12/24 20:37
tkdmaf:我沒記錯的話,php5是改成by reference的。 12/25 12:22
gpmm:樓上說的沒錯, PHP5 開始 object 預設是 call by reference 12/28 03:20
gpmm:主要是你傳遞過程中都是在傳遞物件,換言之就是傳參考,所以 12/28 03:23
gpmm:啊,沒看到一樓大德已經推了一樣的網址… XD 12/28 03:23
s5846125:瞭解,感謝各位大德的講解。 12/29 11:59