如何正确使用 print_r 或 var_dump?

Posted

技术标签:

【中文标题】如何正确使用 print_r 或 var_dump?【英文标题】:How do I properly use print_r or var_dump? 【发布时间】:2013-01-22 11:50:52 【问题描述】:

我在调试时经常使用以下 sn-p:

echo "<pre>" . var_dump($var) . "</pre>";

而且我发现我通常会得到很好的可读输出。但有时我就是不这样做。我现在对这个例子特别恼火:

<?php

$username='xxxxxx';
$password='xxxxxx';

$data_url='http://docs.tms.tribune.com/tech/tmsdatadirect/schedulesdirect/tvDataDelivery.wsdl';
$start=gmdate("Y-m-d\TH:i:s\Z",time());
$stop =gmdate("Y-m-d\TH:i:s\Z",time()+3600*24);

$client = new SoapClient($data_url, array('exceptions' => 0,
                                          'user_agent' => "php/".$_SERVER[SCRIPT_NAME],
                                          'login'      => strtolower($username),
                                          'password'   => $password));
$data = $client->download($start,$stop);

print_r($data);

?>

我当然不想透露我的凭据,但是我被告知 print_r 在这种情况下会像我通常的 sn-p 一样做,而事实上 print_r 和我的 sn-p 都不会产生除了 runon 数据之外的任何东西根本没有格式化。我怎样才能让它漂亮?!

【问题讨论】:

echo "
";print_r($data);
【参考方案1】:

var_dump 总是向您显示格式化数据中的数组,但额外的东西太多了

var_dump($data);

但是如果要格式化数据,这里需要使用&lt;pre&gt;标签:

echo '<pre>';
print_r($data);
echo '</pre>';

【讨论】:

【参考方案2】:

var_dump() 直接回显输出,因此如果要将其捕获到变量以提供自己的格式,则必须使用输出缓冲区:

   ob_start();
   var_dump($var);
   $s = ob_get_clean();

完成此操作后,变量 $s 现在包含 var_dump() 的输出,因此我们可以安全地使用:

   echo "<pre>" . $s . "</pre>";

【讨论】:

print_r() 的作用类似,但如果将第二个参数设置为 'true',则无需使用缓冲函数即可捕获其输出。【参考方案3】:

var_dump 用于您想了解任何变量的更多详细信息。

<?php 
    $temp = "hello" ;
    echo var_dump($temp);
?>

输出如下。 string(5) "hello" 表示它打印变量的数据类型和字符串的长度以及变量中的内容是什么。

而 print_r($expression) 用于打印数组或任何其他无法由 echo 语句直接打印的对象数据类型的数据。

【讨论】:

【参考方案4】:

好吧,print_r() 用于打印数组,但为了以漂亮的方式显示数组,您还需要 html 标记。

只需执行以下操作:

echo "<pre>";
print_r($data);
echo "</pre>";

【讨论】:

以上是关于如何正确使用 print_r 或 var_dump?的主要内容,如果未能解决你的问题,请参考以下文章

输出echo print print_r() var_dump()的区别

PHP调试时print_r ,var_dump的区别

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

php7中echo,print,print_r,var_dump 的区别

php中echo(),print(),print_r(),var_dump()间的区别

php var_dump() 与 print_r()