【发布时间】:2011-06-29 16:38:26
【问题描述】:
var_dump、var_export 和 print_r 有什么区别?
【问题讨论】:
-
有时请别人理解比阅读手册更容易。
-
@Your Common Sense S.O.答案通常比 PHP 手册更清晰、更简洁、可操作,而且基本上总是更容易参考。
标签: php
var_dump、var_export 和 print_r 有什么区别?
【问题讨论】:
标签: php
var_dump 用于调试目的。 var_dump 总是打印结果。
// var_dump(array('', false, 42, array('42')));
array(4) {
[0]=> string(0) ""
[1]=> bool(false)
[2]=> int(42)
[3]=> array(1) {[0]=>string(2) "42")}
}
print_r 也用于调试目的,但不包括成员的类型。如果您知道数组中元素的类型,那么使用它是一个好主意,但否则可能会产生误导。 print_r 默认打印结果,但允许使用可选的$return 参数以字符串形式返回。
Array (
[0] =>
[1] =>
[2] => 42
[3] => Array ([0] => 42)
)
var_export 打印有效的 php 代码。如果您计算了一些值并希望将结果作为另一个脚本中的常数,这很有用。注意var_export 不能处理引用循环/递归数组,而var_dump 和print_r 会检查这些。 var_export 默认打印结果,但允许使用可选的$return 参数以字符串形式返回。
array (
0 => '',
1 => false,
2 => 42,
3 => array (0 => '42',),
)
我个人认为var_export是简洁和精确的最佳折衷。
【讨论】:
var_export,由于其性质,将在递归数组上以可怕的递归方式死亡。 print_r 和 var_dump(虽然,不太确定后者,因为我通常不使用它)没有这个问题。所以不要var_export($_GLOBALS);,例如(它包含自己)。 :)
var_dump 输出。太糟糕了,它不允许将输出作为字符串返回。因此,我可以在上面的评论中与@iconoclast 的情绪有关。但是对于这个用例,我必须选择var_export 而不是var_dump 是可以接受的。为了完整起见,请注意这个相关的feature request。
var_dump 和 var_export 像这样关联(来自manual)
var_export() 被结构化 关于给定变量的信息。 它类似于 var_dump() 有一个 异常:返回的表示 是有效的 PHP 代码。
它们与print_r 的不同之处在于var_dump 导出更多信息,例如数据类型和元素的大小。
【讨论】: