在线文档教程

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 →