为什么 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;
我在标题为 file_upload_form.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;