调试 PHP 代码时,检查代码在特定时间点的状态可能会很有帮助。这可以帮助您了解代码中发生了什么,并找出可能导致问题的任何因素。
下面我们来看看如何使用 PHP 内置函数检查 PHP 代码的状态。
使用 error_log() 记录消息
正如在介绍 WordPress 内置调试选项的课程中所讨论的,您可以使用 error_log() 函数将消息记录到 WordPress 的 debug.log 文件中。
这对于调试非常有用,因为它可以让您查看代码中发生了什么,而无需将其显示在屏幕上。
error_log() 函数并非 WordPress 特有的,它是一个 PHP 函数,您可以在任何 PHP 代码中使用它,将消息记录到服务器上配置的 PHP 错误日志文件中。
不过,在 wp-config.php 文件中启用 WordPress 特定的调试选项后,传递给 error_log() 的任何内容都会记录到 WordPress 的 debug.log 文件中。
error_log( $some_variable );
这会将 $some_variable 的值记录到 debug.log 文件中,这样您就可以看到它在代码该位置包含的内容。
使用 error_log() 的好处是,它可以让您将消息记录到文件中,而无需将其显示在屏幕上。如果将消息显示在屏幕上,尤其是在生产环境中,就有将敏感信息暴露给用户的风险。
有时,直接在日志文件中查看输出也会更快,而不必在屏幕上输出的一长串内容中进行查找。
使用 print_r()
另一个用于检查 PHP 代码状态的实用函数是 print_r()。此函数以人类可读的格式输出变量、数组或对象的值,这样您就可以看到其中包含的内容。
请看下面这段 PHP 示例代码。
$some_array = array( 'apple', 'banana', 'cherry' );
print_r( $some_array );
这段代码将在屏幕上输出以下内容:
Array ( [0] => apple [1] => banana [2] => cherry )
开发人员通常会将 print_r() 包裹在 <pre> 标签中,以使输出更易于阅读。
echo '<pre>';
print_r( $some_array );
echo '</pre>';
这将在屏幕上输出以下内容:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)
请注意,默认情况下,print_r() 会输出变量的值,但不会返回该值。如果您希望将 print_r() 的输出与 error_log() 一起使用,就需要将第二个参数设置为 true。
error_log( print_r( $some_array, true ) );
这会将 print_r 调用的输出记录到 debug.log 文件中,这样您就可以看到 $some_array 在代码该位置包含的内容。
使用 var_dump()
var_dump() 函数是另一个用于检查 PHP 代码状态的实用函数。此函数以人类可读的格式输出变量、数组或对象的值,同时提供有关变量类型和长度的其他信息。
请看下面这段 PHP 示例代码。
$some_array = array( 'apple', 'banana', 'cherry' );
echo '<pre>';
var_dump( $some_array );
echo '</pre>';
这段代码将在屏幕上输出以下内容:
array(3) {
[0]=>
string(5) "apple"
[1]=>
string(6) "banana"
[2]=>
string(6) "cherry"
}
请注意,var_dump() 会输出变量的值,同时提供有关变量类型和长度的其他信息。这对于调试非常有用,因为与 print_r() 相比,它能提供更详细的变量信息。
与 print_r() 不同,var_dump() 没有将输出返回给变量的选项,因此您无法直接将它与 error_log() 一起使用。
不过,您可以使用一种称为输出缓冲的技术来捕获 var_dump() 的输出,然后将其记录到 debug.log 文件中。
$some_array = array( 'apple', 'banana', 'cherry' );
ob_start();
var_dump( $some_array );
$output = ob_get_clean();
error_log( $output );
开发人员通常会在专门的日志记录函数中使用此类代码,以便同时使用 var_dump 和 error_log。
function log_var_dump( $variable ) {
ob_start();
var_dump( $variable );
$output = ob_get_clean();
error_log( $output );
}
延伸阅读
有关本课程中提到的函数的更多信息,请参阅 PHP 文档中的以下页面: