1
class A {
var $b = '1';//null;};
$a = new A();
(xdebug_debug_zval('a'));
debug_zval_dump($a);
exit;
以上输出:
a: (refcount=1, is_ref=0)=class A { public $b = (refcount=2, is_ref=0)='1' }
object(A)#1 (1) refcount(2){
["b"]=>
string(1) "1" refcount(2)
}
2 与1对比 说明 变量 b 是类结构的属性set中定义的 因此是2
class A {
var $b = '1';//null;
public function __construct()
{
$this->a = '3';
}
};
a: (refcount=1, is_ref=0)=class A { public $b = (refcount=2, is_ref=0)='1'; public $a = (refcount=1, is_ref=0)='3' }
object(A)#1 (2) refcount(2){
["b"]=>
string(1) "1" refcount(2)
["a"]=>
string(1) "3" refcount(1)
}
3 :与2对比 说明 对变量 修改后 触发了 写时复制功能
<?php
class A {
var $b = '1';//null;
public function __construct()
{
$this->a = '3';
}
};
$a = new A();
$a->b=2;
(xdebug_debug_zval('a'));
debug_zval_dump($a);
exit;
a: (refcount=1, is_ref=0)=class A { public $b = (refcount=1, is_ref=0)=2; public $a = (refcount=1, is_ref=0)='3' }
object(A)#1 (2) refcount(2){
["b"]=>
long(2) refcount(1)
["a"]=>
string(1) "3" refcount(1)
}