检查PHP代码状态

在调试 PHP 代码时,检查代码在特定时间点的状态会很有帮助。这可以帮助你理解代码中正在发生的事情,并识别可能导致问题的任何错误。

让我们看看一些使用内置 PHP 函数检查 PHP 代码状态的方法。

使用 error_log() 记录消息

正如在关于内置 WordPress 调试选项的课程中所讨论的,你可以使用 error_log() 函数将消息记录到 WordPress 的 debug.log 文件中。

这对于调试目的非常有用,因为它允许你查看代码中正在发生的事情,而无需在屏幕上显示。

error_log() 函数并非 WordPress 特有,它是一个 PHP 函数,你可以在任何 PHP 代码中使用它,将消息记录到服务器上配置的 PHP 错误日志文件中。

但是,一旦你在 wp-config.php 文件中启用了 WordPress 特定的调试选项,传递给 error_log() 的任何内容都将被记录到 WordPressdebug.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_dumperror_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() 函数