debug_zval_dump
debug_zval_dump
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
debug_zval_dump - 将内部zend值的字符串表示转储为输出
描述
void debug_zval_dump ( mixed $variable [, mixed $... ] )
转储要输出的内部zend值的字符串表示形式。
参数
variable
被评估的变量。
返回值
没有值返回。
例子
Example #1 debug
_
zval
_
dump() example
<?php
$var1 = 'Hello World';
$var2 = '';
$var2 =& $var1;
debug_zval_dump(&$var1
?>
上面的例子将输出:
&string(11) "Hello World" refcount(3)
注意:请注意 refcount在某些情况下,此函数返回 的refcount值不明显。例如,开发人员可能会想到上面的例子表明引用次数的2。第三个参考是在实际调用debug_zval_dump()时创建的。当变量未通过引用传递给debug_zval_dump()时,此行为会进一步复杂化。为了说明,请考虑上述示例的稍微修改后的版本:<?php $ var1 ='Hello World'; $ var2 =''; $ var2 =&$ var1; 调试\ _zval \ _dump($ VAR1); //不通过引用传递,这次?>上面的例子会输出:string(11)“Hello World”refcount(1)为什么refcount(1)?因为正在创建$ var1的副本,所以函数被调用时。当一个refcount为1的变量被传递(通过拷贝/值)时,这个函数变得更加混乱:<?php $ var1 ='Hello World'; 调试\ _zval \ _dump($ VAR1); ?>上面的例子会输出:string(11)“Hello World”refcount(2)这里的refcount是2,非常不明显。特别是考虑到上面的例子。那么发生了什么?当一个变量具有单个引用时(与之前的$ var1一样,它被用作debug_zval_dump()的参数)),PHP的引擎优化了它传递给函数的方式。在内部,PHP将$ var1视为一个引用(因为该函数的范围增加了引用计数),但要注意的是,如果传入的引用恰好被写入,则会创建一个副本,但仅在写入时。这被称为“写入时复制”。所以,如果debug_zval_dump()碰巧写入它的唯一参数(并且它不),那么将会创建一个副本。在此之前,该参数仍然是一个引用,导致该函数调用的范围将refcount递增为2。
← boolval
doubleval →