【问题标题】:Why print_r() still exists?为什么 print_r() 仍然存在?
【发布时间】:2011-08-03 17:45:54
【问题描述】:
print_r(array('name'=> 'bob', 'age' => 20, 'sex' => 'man'));

然后:

Array {
    [name] => bob,
    [age] => 20,
    [sex] => man }

var_dump(array('name' => 'bob', 'age' => 20));

将显示:

array(2) {
    ['name'] => string(3) 'bob'
    ['age'] => int(20) }

var_dump 非常适合调试,比print_r 好得多。但是为什么print_r 仍然存在?或print_r 有一些我不知道的优势

【问题讨论】:

标签: php


【解决方案1】:

如果您在<pre> 标签之间输出 print_r,那么它会为您提供比 var_dump 更具可读性的输出。这是我在调试时使用的主要原因。

Array
(
    [name] => bob,
    [age] => 20,
    [sex] => man
)

基本上,它为您提供了 var_dump 没有的格式化输出。虽然它没有为您提供非常详细的类型信息。

【讨论】:

  • 完全同意! pre 标签之间的 print_r 很漂亮:D
  • 是的,如果可能有很多软件依赖于它,为什么要删除一个功能,并且会中断?它是 API 设计的基本部分,您很少删除某些内容,而且只有在绝对必要时才会这样做。
  • 很漂亮,但主要是不太杂乱
  • 很明显你伪造了这个输出,因为print_r输出(/),而不是{/}。 :) [除非这在最近的版本中有所改变?]
  • 是的,我打错了,它不是真正的输出。这是一个大阴谋。
【解决方案2】:

print_rvar_dump 之间的一个很大区别是print_r 带有一个可选的第二个参数,它允许您将内容存储在一个变量中。例如:

$debug = print_r($someArray, true);
echo $debug;

(请注意,var_dump 也可以使用 output control functions 来实现)

另外,print_r可读性远胜var_dump

var_dump:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

print_r:

Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)

【讨论】:

    【解决方案3】:

    您能否提出一些理由,通过删除来破坏数十万个 PHP 脚本?

    【讨论】:

      【解决方案4】:

      如果您希望获得尽可能多的数据,可以使用 var_dump(),但是我发现 print_r() 更易于人类阅读。

      【讨论】:

      • 您的第二个陈述不正确:var_dump 输出公共、受保护的 私有属性。
      • @Aron Rotteveel:你是对的,我应该更频繁地参考 PHP5 :)
      猜你喜欢
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多