为什么print_r和var_dump在echo之前执行

时间:2011-12-03 00:02:56

标签: php

我在var_dump()语句中有一个值的数组上调用print_r()echo

echo "<br><br>testArray is ==> " . var_dump($testArray) . " <===<br><br>";

以下是浏览器中的实际输出:

array
0 => string '28' (length=2)


testArray is ==> <===

这是我无法获得的细微差别。对我来说,执行的顺序是:

  1. echo执行并显示testArray is ==>
  2. 对var_dump的调用执行并显示数组内容
  3. 然后<==应该执行
  4. 不是在输出上看到1,2,然后是3,而是按顺序看到2, 1, 3。 这是一行服务器端代码。这个细微差别是什么?

3 个答案:

答案 0 :(得分:9)

他们这样做是因为他们没有返回数据,他们正在回应。您可以print_r($array, true)使其返回,但var_dump()将需要输出缓冲。

如果您希望它按照您尝试制作它的方式工作,请将它们分成不同的调用。

答案 1 :(得分:3)

var_dump不会返回任何内容,它会自行打印。它首先进行评估,因为PHP无法连接一个它不知道值的表达式。你可能想要:

echo "<br><br>testArray is ==> ";
var_dump($testArray);
echo " <===<br><br>";

代替。打印开始,中间,然后结束。

答案 2 :(得分:0)

您可以使用逗号运算符代替点运算符:

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

object(Calendar)#2 
<pre>
</pre>

echo "<pre>" , var_dump($cal) , "</pre>";

<pre>object(Calendar)#2 
</pre>