在调试 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 文件中。
<?php
error_log( $some_variable );
?>
这会将 $some_variable 的值记录到 debug.log 文件中,这样你就可以看到它在代码中该点的内容。
使用 error_log() 的好处是,它允许你将消息记录到文件,而无需在屏幕上显示。如果你在屏幕上显示它们,尤其是在生产环境中,你可能会面临向用户暴露敏感信息的风险。
有时,在日志文件中查看输出也比在屏幕上搜索一长串输出更快。
使用 print_r()
另一个用于检查 PHP 代码状态的有用函数是 print_r()。此函数以人类可读的格式输出变量、数组或对象的值,以便你可以查看其内容。
看看这个 PHP 代码示例。
<?php
$some_array = array(
'name' => 'John',
'age' => 30,
'city' => 'New York'
);
print_r( $some_array );
?>
这段代码将在屏幕上输出以下内容:
Array
(
[name] => John
[age] => 30
[city] => New York
)
开发者通常会将 print_r() 包裹在 <pre> 标签中,以使输出更易于阅读。
<pre>
<?php print_r( $some_array ); ?>
</pre>
这将在屏幕上输出以下内容:
Array
(
[name] => John
[age] => 30
[city] => New York
)
请注意,默认情况下 print_r() 会输出变量的值,但不会返回它。如果你想将 print_r() 的输出与 error_log() 一起使用,需要将第二个参数设置为 true。
<?php
error_log( print_r( $some_array, true ) );
?>
这会将 print_r 调用的输出记录到 debug.log 文件中,这样你就可以看到 $some_array 在代码中该点的内容。
使用 var_dump()
var_dump() 函数是另一个用于检查 PHP 代码状态的有用函数。此函数以人类可读的格式输出变量、数组或对象的值,同时提供关于变量类型和长度的额外信息。
看看这个 PHP 代码示例。
<?php
$some_array = array(
'name' => 'John',
'age' => 30,
'city' => 'New York'
);
var_dump( $some_array );
?>
这段代码将在屏幕上输出以下内容:
array(3) {
["name"]=>
string(4) "John"
["age"]=>
int(30)
["city"]=>
string(8) "New York"
}
请注意,var_dump() 会输出变量的值,以及关于变量类型和长度的额外信息。这对于调试目的非常有用,因为它提供了比 print_r() 更详细的变量信息。
与 print_r() 不同,var_dump() 没有将输出返回给变量的选项,因此你不能直接将其与 error_log() 一起使用。
但是,你可以使用一种称为输出缓冲的技术来捕获 var_dump() 的输出,然后将其记录到 debug.log 文件中。
<?php
ob_start();
var_dump( $some_array );
$output = ob_get_clean();
error_log( $output );
?>
开发者通常会将这种代码用于一个特殊的日志记录函数,以便能够同时使用 var_dump 和 error_log。
<?php
if ( ! function_exists( 'var_log' ) ) {
function var_log( $log ) {
ob_start();
var_dump( $log );
$output = ob_get_clean();
error_log( $output );
}
}
?>
进一步阅读
有关本课程中提到的函数的更多信息,请查看 PHP 文档中的以下页面:
PHP var_dump() 函数
PHP error_log() 函数
PHP print_r() 函数