如何在函数中调试函数内的变量.php文件?

时间:2015-12-03 作者:ReynierPM

我有这个功能:

function wpse_210493_apply_advertising_position( &$posts, $return = false ) {
    $ad_posts = array();

    $content_posts = array_filter(
        $posts,
        function ( $post ) {
            $position = get_post_meta( $post->ID, \'rw_adversiting_position\', true );

            if ( empty( $position ) ) {
                return true;
            }

            $ad_posts[ intval( $position ) ] = $post;

            return false;
        } );

    $content_posts = array_values( $content_posts );

    ksort( $ad_posts );

    echo "sdfksfkjshdfsdf";

    foreach ( $ad_posts as $position => $ad ) {
        array_splice( $content_posts, $position, 0, $ad );
    }

    if ( $return ) {
        return $content_posts;
    } else {
        $posts = $content_posts;
    }
}
我需要调试$ad_postsksort() 但输出不会发送到浏览器。我用echo 您看到了,并且该文本也不会作为输出发送到浏览器。如何正确调试这些值?

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您可以简单地使用var_dump() 这样做。这就是我检查函数和过滤器中的值的方式。

我在一个文件中有以下代码行,我只需将其复制并粘贴到需要转储变量值的地方

?><pre><?php var_dump( $variable_to_test ); ?></pre><?php
Thepre 标记根据值转储一个可读的数组/对象/字符串。在你的功能中,你可以

?><pre><?php var_dump($ad_posts); ?></pre><?php 
之后ksort( $ad_posts );.

如果函数没有钩住某种钩子,请确保在某个地方调用该函数,否则不会发生任何事情

SO网友:Navidot

若要调试这些值,不必在浏览器中显示它们。而不是:

error_log(your-variable-or-whatever);
并检查您的错误登录wp-content/debug.log.

要让它发挥作用,你必须define( \'WP_DEBUG_LOG\', true ); 设置您的wp-config.php.

编辑:正如@nmr指出的,define( \'WP_DEBUG\', true ); 也需要。

SO网友:sMyles

正确的方法是使用XDebug和支持它的某种IDE,同时在本地进行开发。

我可以推荐的最简单的设置是使用本地飞轮(免费)进行本地开发:https://localbyflywheel.com/

Local在Utilities(针对站点)下有选项将XDebug配置添加到PHPStorm,单击该按钮后,在PHPStorm中重新打开项目,您将看到该站点已经设置了调试配置。

PHPStorm EAP(EAP以前是免费的)可以在此处下载(也有30天的试用期):https://blog.jetbrains.com/phpstorm/2019/04/phpstorm-2019-1-2-preview-191-7141-5/

关于设置XDebug的文档:https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html

然后可以在代码中设置断点,并使用XDebug对其进行检查。

上面的选项确实可以在紧要关头使用,但调试PHP的正确方法是使用IDE和XDebug,如果您学会了正确的方法,将节省大量时间。

Using error_log:

展开其他人对error_log 输出,如果它是一个数组或不是字符串的东西,最好使用print_r 并将返回设置为true:

error_log( \'MY STUFF: \' . print_r( $something, true ) );

相关推荐

"rest_no_route" - Debug error

我正在使用Wordpress4.9.5 我想创建一个自定义端点,如下所示:<?php add_action(\'rest_api_init\', \'miningRigsRoutes\'); function miningRigsRoutes() { register_rest_route(\'miningRigs/v1\', \'createRig\', array( \'methods\' => WP_REST_SE