var_dump
, var_export
和print_r
有什么区别?
var_dump
, var_export
和print_r
有什么区别?
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_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)
,因为它包含了自身。 :) - pinkgothicvar_dump
输出。可惜它不允许将输出作为字符串返回。因此,我可以理解上面评论中 @iconoclast 的感受。但是,在这种情况下选择 var_export
而不是 var_dump
对我来说是可以接受的。为了完整起见,请注意这个相关的 功能请求。 - pjvleeuwenvar_dump
和var_export
的关系如下(来自手册)
var_export()
获取给定变量的结构化信息。它类似于var_dump()
,但有一个例外:返回的表示是有效的PHP代码。
它们与print_r
的不同之处在于var_dump
导出更多的信息,如元素的数据类型和大小。