作者s5846125 (陸奧鬼一)
看板PHP
標題[請益] 沒用 = & 卻有 reference 的效果?
時間Fri Dec 23 21:52:06 2011
<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
→ 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