为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
开心每一天1111 2019-03-18 18:07:32
手册: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贡献1851条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
?
暮色呼如

TA贡献1853条经验 获得超9个赞

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

php5之后就不用这样写了:
$obj = new object();

查看完整回答
反对 回复 2019-03-18
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-18
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

其实$a$b都是指向的是对象的标识符,也就是你输出时看到的#1,而这个标识符才是指向的对象。

而当你设置了$b=100时,此时改变了$b的指向,但是并不会影响$a的指向。

https://img1.sycdn.imooc.com//5c8f6de300015ad605730520.jpg

查看完整回答
反对 回复 2019-03-18
  • 7 回答
  • 0 关注
  • 604 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信