为什么 print_r() 函数会干扰程序输出?

Why the print_r() function is disturbing the program output?

我在标题为 file_upload_form.html:

的文件中编写了以下 HTML 代码
<!DOCTYPE html>
<html>
  <body>

    <form action="upload.php" method="post" enctype="multipart/form-data">
      Select image to upload:
      <input type="file" name="fileToUpload" id="fileToUpload">
      <input type="submit" value="Upload Image" name="submit">
    </form>

  </body>
</html>

并且标题为 upload.php 的文件包含以下代码:

<?php
  echo "Value of Post is : ".print_r($_POST); die;
?>

当我在 Web 浏览器中 运行 这段代码时(即通过单击“提交”按钮提交 HTML 表单),我得到以下输出:

Array ( [submit] => Upload Image ) Value of Post is : 1

请参考:

如何在字符串 "Value of Post is : " 之前打印 print_r() 函数的输出,我的下一个问题是在字符串之后打印值 1 的位置"Value of Post is : "?

我的意思是为什么程序输出会有这样的差异?为什么字符串 "Value of Post is : " 不是第一个,然后是数组 $_POST 中的值?为什么要打印 1 以及它来自哪里?

如果你想return而不是直接输出到

,你需要将true作为第二个参数传递给print_r
echo "Value of Post is : ".print_r($_POST); die;

请参考http://php.net/manual/en/function.print-r.php:

return

If you would like to capture the output of print_r(), use the return parameter. When this parameter is set to TRUE, print_r() will return the information rather than print it.

当你不设置第二个参数为true时,PHP会先执行print_r并立即将变量dump到STDOUT。 print_r 的 return 值将是一个布尔值 true。布尔值将被连接然后打印。 true 类型在字符串上下文中变戏法为“1”,因此 "Value of Post is: 1".

print_r() 默认打印结果本身。

这一行:

echo "Value of Post is : ".print_r($_POST); die;

并不像您认为的那样。当它被解释时,它调用 print_r,它打印它的输出,然后你的 echo 打印字符串 echo "Value of Post is : ",然后是你的 print_r() 的 return。因为它 return 什么都没有,所以只有字符串是 returned.

但它们是一种使其完全按照您假设的方式工作的方法。 print_r() 接受第二个参数,默认设置为 false

mixed print_r ( mixed $expression \[, bool $return = false \] )

将此参数设置为 true 会使 print_r 不打印其输出本身并 return 将其作为字符串代替:

echo "Value of Post is : ".print_r($_POST, true); die;

作为提示,如果您还不知道,您还可以使用 <pre> 标记来构建 print_r 调用,以便对其进行格式化。这将使它更具可读性,尤其是对于大数组或多维数组:

echo '<pre>Value of Post is : ', print_r($_POST, true), '</pre>'; die;