var_dump、var_export 和 print_r 之间的区别

Posted

技术标签:

【中文标题】var_dump、var_export 和 print_r 之间的区别【英文标题】:Difference between var_dump,var_export & print_r 【发布时间】:2011-06-29 16:38:26 【问题描述】:

var_dumpvar_exportprint_r 有什么区别?

【问题讨论】:

有时请别人理解比阅读手册更容易。 @Your Common Sense S.O.答案通常比 php 手册更清晰、更简洁、可操作,而且基本上总是更容易参考。 【参考方案1】:

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_dumpprint_r 会检查这些。 var_export 默认打印结果,但允许使用可选的$return 参数以字符串形式返回。

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

我个人认为var_export是简洁和精确的最佳折衷。

【讨论】:

请注意,var_export,由于其性质,将在递归数组上以可怕的递归方式死亡。 print_rvar_dump(虽然,不太确定后者,因为我通常不使用它)没有这个问题。所以不要var_export($_GLOBALS);,例如(它包含自己)。 :) @ftrotter 我一直认为评论可以很好地解释这种好奇心,但是你去吧,在答案中添加了一个简短的注释。 需要补充一点,可以让 print_r() 和 var_export() 返回一个字符串而不是输出,而 var_dump() 则不行。另外,我不喜欢 var_export(),因为它令人困惑——如果你尝试导出一些未定义的常量 SOMECONST,你只会得到一个文本字符串“SOMECONST”。所以它不会说 NULL, 0, "",但它实际上会假定它是一个字符串(我想也会抛出一个 NOTICE)。 var_export 适合安全地表示字符串,例如引号/反斜杠保护。 我个人更喜欢var_dump 输出。太糟糕了,它不允许将输出作为字符串返回。因此,我可以在上面的评论中与@iconoclast 的情绪有关。但是对于这个用例,我必须选择var_export 而不是var_dump 是可以接受的。为了完整起见,请注意这个相关的feature request。【参考方案2】:

var_dumpvar_export 像这样关联(来自manual)

var_export() 被结构化 关于给定变量的信息。 它类似于 var_dump() 有一个 异常:返回的表示 是有效的 PHP 代码。

它们与print_r 的不同之处在于var_dump 导出更多信息,例如数据类型和元素的大小。

【讨论】:

以上是关于var_dump、var_export 和 print_r 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

PHP echo()print()print_r()var_dump()var_export()的区别

php volcar()var_export()var_dump PDF数组en string log texto PHP

PHP中var_dump是啥意思

var_export

php 一些常用函数

cakephp 将数组记录为 var_dump