虽然被接受的答案是正确的,但为了清晰起见,我想包括一个扩展解释的答案。
print_r()
接受两个论点(see the documentation for this function), 第二个是可选的,您已经省略了。第一个参数是要打印的表达式。第二个指定是返回值还是打印值。
省略第二个参数时,其默认值为false
因此它会立即打印结果。如果此参数为false,print_r()
将返回true
(在错误日志中显示为“1”)。
$result = print_r( $variable );
此处返回的结果为
true
(显示为“1”)。
您正在传递返回的结果print_r()
到error_log()
. 出于上述原因,此结果为“1”,这就是为什么日志中的条目为1。
以获取包含表达式的结果$variable
并将其传递给error_log()
功能,您需要print_r()
返回表达式作为结果。可以通过将第二个参数指定为TRUE来实现这一点。
$result = print_r( $variable, true );
现在返回的结果
print_r()
表达式是否包含在
$variable
你可以把它传给
error_log()
:
$result = print_r( $variable, true );
error_log( $result );
OR:
error_log( print_r( $variable, true ) );
如果您想进一步了解这一点,可以编写一个实用程序函数,用于写入日志,以确定
$variable
是数组或对象,因此需要
print_r()
, 或者如果它可以简单地作为字符串传递。这使得处理调试日志记录变得很容易,因为您不必关心变量类型,就可以将其传递给日志记录。我写过这样的
a utility along with a detailed explanation here.
Side note on the PHP functions you mentioned: 无论您的经验有多丰富,查看您正在使用的函数的文档总是很有帮助的,以确保您了解它们的实际功能。我已链接到print_r()
上面的文档准确地描述了本文档和公认答案中所讨论的内容。但也提到了其他一些PHP函数,它们可以工作,也可以不工作。让我们考虑一下:
var_dump()
: 文档表明此函数不返回结果。为了把东西传给error_log()
要包含在错误日志中,它需要是包含在变量中的表达式。此函数不返回任何内容,只输出到屏幕。所以你不能用它来传递任何东西给error_log()
.
var_export()
: 类似print_r()
因为您有第二个可选参数,用于返回结果或打印到屏幕。将第二个参数定义为true
能够返回的结果error_log()
.
gettype()
始终返回变量的类型。所以你有东西可以传给error_log()
默认情况下。这就是它成功的原因。