为什么数组的初始引用计数在php7.1中是2

Ger*_*awn 5 php arrays xdebug

$a = [1, 2, 3];
xdebug_debug_zval('a');
$b = $a;
xdebug_debug_zval('a');
unset($b);
xdebug_debug_zval('a');
Run Code Online (Sandbox Code Playgroud)

这将输出

a: (refcount=2, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 =>(refcount=0, is_ref=0)=2)
a: (refcount=3, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 => (refcount=0, is_ref=0)=2)
a: (refcount=2, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 => (refcount=0, is_ref=0)=2)
Run Code Online (Sandbox Code Playgroud)

为什么在第一行refcount是2

Sys*_*all 0

这似乎是由于“PHP 7 中的内部值表示”。

请遵循PHP 手册上的引用计数基础知识中的此评论。

详细信息请参见nikic 的博客:“Zvals in PHP 7”。

请另请参阅此github 上的 xdebug 提交。这也可能是答案的一部分。