手册:http://php.net/manual/zh/lang...
class A{
}
$a=new A;
$b=$a;
$a->name='haha';
echo '<pre>';
var_dump($b);
var_dump($a);
echo '<hr/>';
function test($obj){
$obj->name='xixi';
}
test($a);
var_dump($b);
var_dump($a);
echo '<hr/>';
$a=100;
var_dump($a);
var_dump($b);
结果:
如果说对象是值传递,那么改变对象属性的时候,没有触发copy on write吗
7 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
php5之前是值传递:
比如PHP4 有这样的写法 $obj = & new object();
php5之后就不用这样写了:
$obj = new object();
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
$a和$b是同一个标示符的拷贝,都是指向同一个对象A,所以你改变$a或者$b的属性 其实也就是改变的同一个对象A的属性,但是$a和$b是两个不同的变量,他们两个不是引用关系。
$a=100,这里$a已经是变成整数类型,不再指向对象A了,$b还是指向的对象A。
$b = &$a;你改成这样,$a和$b就是引用关系,后面$b也会输出为100。
qq_笑_17
TA贡献1818条经验 获得超7个赞
其实$a
和$b
都是指向的是对象的标识符,也就是你输出时看到的#1
,而这个标识符才是指向的对象。
而当你设置了$b=100
时,此时改变了$b
的指向,但是并不会影响$a
的指向。
- 7 回答
- 0 关注
- 604 浏览
添加回答
举报
0/150
提交
取消