【发布时间】:2018-05-08 05:08:19
【问题描述】:
我使用 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 ? :
请注意,如果“refcount”为 1,“is_ref”始终为 FALSE。
PS:OPcache 已禁用 (opcache.enable=0)。
【问题讨论】:
标签: php xdebug php-internals