我有一个php文件,它是wordpress插件的一部分。我需要调试我们遇到的问题。我想知道变量的值是什么。如何将变量的值打印到控制台?建议使用echo或chrome或firefox扩展名。我无法回显输出到控制台(echo “$variablename";
),也没有使用firefox的firephp扩展名。
答案 0 :(得分:5)
如果您正在考虑使用javascript控制台,则无法通过PHP执行此操作。
您可以选择以下几个选项:
为了快速检查变量值,我会使用var_dump,它还会显示变量的数据类型。当您请求页面时,这将输出到浏览器。
答案 1 :(得分:3)
要回答您的问题,可以执行此操作:
echo '<script>console.log("PHP error: ' . $error . '")</script>';
但我建议做一些@Ishas建议的事情。确保$error
不包含任何可能弄乱脚本的内容。
答案 2 :(得分:1)
在这里,您可以在 WooCommerce 中调试优惠券逻辑时看到我对问题的解决方案。此解决方案仅用于调试目的。 (注意:截图不是最新的,也会暴露私有成员。)
function console_log(): string {
list( , $caller ) = debug_backtrace( false );
$action = current_action();
$encoded_args = [];
foreach ( func_get_args() as $arg ) try {
if ( is_object( $arg ) ) {
$extract_props = function( $obj ) use ( &$extract_props ): array {
$members = [];
$class = get_class( $obj );
foreach ( ( new ReflectionClass( $class ) )->getProperties() as $prop ) {
$prop->setAccessible( true );
$name = $prop->getName();
if ( isset( $class->{$name} ) ) {
$value = $prop->getValue( $obj );
if ( is_array( $value ) ) {
$members[$name] = [];
foreach ( $value as $item ) {
if ( is_object( $item ) ) {
$itemArray = $extract_props( $item );
$members[$name][] = $itemArray;
} else {
$members[$name][] = $item;
}
}
} else if ( is_object( $value ) ) {
$members[$name] = $extract_props( $value );
} else $members[$name] = $value;
}
}
return $members;
};
$encoded_args[] = json_encode( $extract_props( $arg ) );
} else {
$encoded_args[] = json_encode( $arg );
}
} catch ( Exception $ex ) {
$encoded_args[] = '`' . print_r( $arg, true ) . '`';
}
$msg = '`?`, `'
. ( array_key_exists( 'class', $caller ) ? $caller['class'] : "\x3croot\x3e" )
. '\\\\'
. $caller['function'] . '()`, '
. ( strlen( $action ) > 0 ? '`?`, `' . $action . '`, ' : '' )
. '` ➡️ `, ' . implode( ', ', $encoded_args );
$html = '<script type="text/javascript">console.log(' . $msg . ')</script>';
add_action( 'wp_enqueue_scripts', function() use ( $html ) {
echo $html;
} );
add_action( 'admin_enqueue_scripts', function() use ( $html ) {
echo $html;
} );
error_log( $msg );
return $html;
}
wp-config.php(部分)
// ...
define( 'WP_DEBUG', true );
// ...
/** Include WP debug helper */
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && file_exists( ABSPATH . 'wp-debug.php' ) ) {
include_once ABSPATH . 'wp-debug.php';
}
if ( ! function_exists( 'console_log' ) ) {
function console_log() {
}
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
<head>
之前:console_log( $myObj, $myArray, 123, "test" );
<head>
后(在模板等中/当上述方法不起作用时使用):echo console_log( $myObj, $myArray, 123, "test" );
? <caller class>\<caller function>() ? <caller action/hook> ➡️ <variables ...>
答案 3 :(得分:0)
您可以编写如下的实用函数:
function prefix_console_log_message( $message ) {
$message = htmlspecialchars( stripslashes( $message ) );
//Replacing Quotes, so that it does not mess up the script
$message = str_replace( '"', "-", $message );
$message = str_replace( "'", "-", $message );
return "<script>console.log('{$message}')</script>";
}
您可以这样调用函数:
echo prefix_console_log_message( "Error Message: This is really a 'unique' problem!" );
,这将输出到控制台,如下所示:
Error Message: This is really a -unique- problem!
请注意将引号替换为“-”。这样做是为了使消息不会像@ Josef-Engelfrost所指出的那样弄乱您的脚本
您也可以再走一步,做这样的事情:
function prefix_console_log_message( $message, $type = "log" ) {
$message_types = array( 'log', 'error', 'warn', 'info' );
$type = ( in_array( strtolower( $type ), $message_types ) ) ? strtolower( $type ) : $message_types[0];
$message = htmlspecialchars( stripslashes( $message ) );
//Replacing Quotes, so that it does not mess up the script
$message = str_replace( '"', "-", $message );
$message = str_replace( "'", "-", $message );
return "<script>console.{$type}('{$message}')</script>";
}
并调用如下函数:
echo prefix_console_log_message( "Error Message: This is really a 'unique' problem!" , 'error');
它将在控制台中输出错误。