PHP对象到底是值传递还是引用传递

手册: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);

结果:

https://img.mukewang.com/5c8f6de20001d72903300714.jpg

如果说对象是值传递,那么改变对象属性的时候,没有触发copy on write吗

开心每一天1111
浏览 612回答 7
7回答

江户川乱折腾

造成这种疑问的,都是把引用当成指针去理解了.

暮色呼如

php5之前是值传递:比如PHP4 有这样的写法 $obj = & new object(); php5之后就不用这样写了: $obj = new object();

尚方宝剑之说

$a和$b是同一个标示符的拷贝,都是指向同一个对象A,所以你改变$a或者$b的属性 其实也就是改变的同一个对象A的属性,但是$a和$b是两个不同的变量,他们两个不是引用关系。$a=100,这里$a已经是变成整数类型,不再指向对象A了,$b还是指向的对象A。$b = &$a;你改成这样,$a和$b就是引用关系,后面$b也会输出为100。

qq_笑_17

其实$a和$b都是指向的是对象的标识符,也就是你输出时看到的#1,而这个标识符才是指向的对象。 而当你设置了$b=100时,此时改变了$b的指向,但是并不会影响$a的指向。
打开App,查看更多内容
随时随地看视频慕课网APP