PHP 的 Object 指向内存地址是相同的吗

类似 js一样 Object 不论如何赋值,他们引用的内存地址都是相同的吗

阅读 2.8k
1 个回答

是的

$a = new stdClass();
$b = $a;
$b->x = 1;
$c = clone $a;

xdebug_debug_zval("a");
xdebug_debug_zval("b");
xdebug_debug_zval("c");

a:
(refcount=2, is_ref=0)
object(stdClass)[1]
  public 'x' => (refcount=0, is_ref=0)int 1
b:
(refcount=2, is_ref=0)
object(stdClass)[1]
  public 'x' => (refcount=0, is_ref=0)int 1
c:
(refcount=1, is_ref=0)
object(stdClass)[2]
  public 'x' => (refcount=0, is_ref=0)int 1

a、b的引用计数为2,两个变量指向相同的内容,在对b进行添加属性时会同时改变a、b,且不会进行强制分裂
c为clone $a的新对象,指向新的内存地址

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题