2011-04-12 109 views
2
print_r(array('name'=> 'bob', 'age' => 20, 'sex' => 'man')); 

然后:为什么print_r()仍然存在?

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有一些我不知道的优点

+4

传统代码可能正在使用它,因此没有任何伤害。 – Twelve47 2011-04-12 09:39:14

+0

另一种替代'print_r'和'var_dump'的方法是'var_export'。 – Sjoerd 2011-04-12 09:41:55

+0

http://stackoverflow.com/questions/3406171/php-var-dump-vs-print-r – Gordon 2011-04-12 09:43:05

回答

8

print_rvar_dump之间的最大区别在于,print_r接受一个可选的第二个参数,它允许到商店的内容在变量中。例如:

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

(请注意,这也为使用output control functionsvar_dump来实现,虽然)

此外,可读性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 
     ) 
) 
11

如果你输出print_r到<pre>标签,那么它给你一个比var_dump更可读的输出。这是我在调试时使用的主要原因。

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

基本上它给你一个var_dump没有的格式化输出。虽然它不能提供详细的类型信息。

+0

完全同意!前标签之间的print_r是美丽的:D – Headshota 2011-04-12 09:40:22

+0

是的,如果可能很多软件依赖于它,为什么还要删除一个函数,并且会打破?它是API设计的基本组成部分,你很少删除某些东西,而这只有在绝对必要时才会被删除。 – sukru 2011-04-12 09:40:42

+1

和xdebug + var_dump可以更好地格式化:) – dogmatic69 2011-04-12 09:40:51

0

如果你希望得到尽可能多的数据,你可以使用var_dump(),但是我发现,print_r()是人类更具可读性。

+0

你的第二个陈述是不正确的:'var_dump'输出public,protected *和* private属性。 – 2011-04-12 09:48:09

+0

@Aron Rotteveel:你是对的,我应该更频繁地参考PHP5 :) – BigFatBaby 2011-04-12 09:51:39

2

你可以推荐一些理由去除成千上万的PHP脚本吗?

相关问题