注意,是PHP7(7.0.19)
代码:
$a=[];
xdebug_debug_zval('a');
结果:
a:
(refcount=2, is_ref=0)
array (size=0)
empty
注意,是PHP7(7.0.19)
代码:
$a=[];
xdebug_debug_zval('a');
结果:
a:
(refcount=2, is_ref=0)
array (size=0)
empty
收起
纠结这个没什么用的,平常又用不到
猜测,php原本就是有个固定的空数组,然后$a指向了该空数组,所以recount为2,如果$a做了修改的话,就会直接生成一个新的数组并开辟空间。
因为空数组比较经常用到吧,如果每次开辟个空的,会浪费。纯属猜测。
这牵扯到 PHP7 中的另一个概念,叫做 immutable array (不可变数组),在不可变数组下,使用一个伪计数值2。类型是这种直接申明规定数组
array(1,2,3)的refcount = 2 你可以看下 array("time"=>time())这样的申明,就是1。
摘抄一段PHP7数组开发成员的一段原话,你可以看看。
For arrays the not-refcounted variant is called an "immutable array". If you use opcache, then constant array literals in your code will be converted into immutable arrays. Once again, these live in shared memory and as such must not use refcounting. Immutable arrays have a dummy refcount of 2, as it allows us to optimize certain separation paths.
报告相同问题?