作者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
1F:推 bibo9901:PHP的物件要想成C/C++的指标 12/23 22:16
3F:→ bibo9901:解决你的问题要用 $_item=clone $this->items ; 12/23 22:19
4F:→ bibo9901:我发现我第一行有语病XD.....C没有物件 12/23 22:22
6F:→ kornelius:PHP 物件模型跟 Java 一样任何物件都是 pointer 12/24 20:37
7F:推 tkdmaf:我没记错的话,php5是改成by reference的。 12/25 12:22
8F:→ gpmm:楼上说的没错, PHP5 开始 object 预设是 call by reference 12/28 03:20
9F:→ gpmm:主要是你传递过程中都是在传递物件,换言之就是传参考,所以 12/28 03:23
11F:→ gpmm:啊,没看到一楼大德已经推了一样的网址… XD 12/28 03:23
12F:→ s5846125:了解,感谢各位大德的讲解。 12/29 11:59