我使用xdebug_debug_zval
来理解PHP 5和PHP 7之间的引用是如何变化的。
<?php
$array = array('k1', 'k2', 'k3');
echo PHP_VERSION. '<br/>';
foreach ($array as &$ref) {
}
unset($ref);
xdebug_debug_zval('ref');
xdebug_debug_zval('array');
PHP 5.5.9-1ubuntu4.14:
5.5.9-1ubuntu4.14
array:
(refcount=1, is_ref=0),
array (size=3)
0 => (refcount=1, is_ref=0),string 'k1' (length=2)
1 => (refcount=1, is_ref=0),string 'k2' (length=2)
2 => (refcount=1, is_ref=0),string 'k3' (length=2)
PHP 7.0.8-0ubuntu0.16.04.3:
7.0.8-0ubuntu0.16.04.3
ref:
(refcount=0, is_ref=0)*uninitialized*
array:
(refcount=1, is_ref=1)
array (size=3)
0 => (refcount=1, is_ref=1)string 'k1' (length=2)
1 => (refcount=1, is_ref=1)string 'k2' (length=2)
2 => (refcount=1, is_ref=1)string 'k3' (length=2)
为什么在PHP 7中is_ref
等于1知道我已根据PHP documentation取消设置引用? :
请注意,如果&#34; refcount&#34;是1,&#34; is_ref&#34;总是假的。
PS :OPcache被禁用(opcache.enable=0
)。
答案 0 :(得分:0)
不幸的是,由于PHP 7改变了内部处理变量的方式,xdebug_debug_zval()
实际上不可能再提供完全准确的结果。