警告:更新到 PHP 7.2 后使用未定义的常量 _ - 假定为“_”(这将在 PHP 的未来版本中引发错误)

Posted

技术标签:

【中文标题】警告:更新到 PHP 7.2 后使用未定义的常量 _ - 假定为“_”(这将在 PHP 的未来版本中引发错误)【英文标题】:Warning: Use of undefined constant _ - assumed '_' (this will throw an Error in a future version of PHP) after updating to PHP 7.2 【发布时间】:2020-06-10 16:08:06 【问题描述】:

我已经检查了其他相关帖子,但不幸的是它对我的问题没有帮助。

我来了

警告:使用未定义的常量 _ - 假定为“_”(这将在 php 的未来版本中引发错误)

更新到 PHP 7.2 后出错

我追查到这段代码sn-p的原因:

<span class="post-container__excerpt-price"><?php echo '$' . number_format( (float)get_field('price', $post->ID) );  ?></span>

当我删除此错误时,错误消失了,但我似乎也找不到此代码的任何明显问题。 'price', $post-&gt;ID 指的是使用 ACF 创建的自定义字段。

有人知道吗? 非常感谢!

整个代码块如下:

// create shortcode to list all listings
add_shortcode( 'list-posts-basic', 'rmcc_post_listing_shortcode1' );
function rmcc_post_listing_shortcode1( $atts ) 
    ob_start();
    $query = new WP_Query( array(
        'post_type' => 'listings',
        'posts_per_page' => -1,
        'order' => 'DESC',
        'orderby' => 'date',
    ) );
    if ( $query->have_posts() )  ?>
        <div class="posts-container">
            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
            <div class="post-container" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

                <a class="" href="<?php the_permalink(); ?>"><div class="listing-post-img" style="background: url(<?php echo get_the_post_thumbnail_url() ?> )"></div></a>

                <div class="post-container__content">
                    <a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
                    <p class="post-container__excerpt">
                        <?php the_excerpt();  ?>
                        <span class="post-container__excerpt-price"><?php echo '$' . number_format( (float)get_field('price', $post->ID) );  ?></span>
                    </p>

                    <a class="post-container__button" href="<?php the_permalink(); ?>">View Details</a>
                </div>
            </div>
            <?php endwhile;
            wp_reset_postdata(); ?>
        </div>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    

【问题讨论】:

$post-&gt;ID 应该是 woocommerce 产品 ID 吗? 它是 ACF(高级自定义字段)的一部分 如果你输入number_format(floatval(get_field('price', $post-&gt;ID)), 2)会发生什么 那行不通... 您是否 100% 确定这是导致警告的代码,完全一样吗?因为那里没有不合适的下划线。 【参考方案1】:

问题是 $post->ID。此时无法访问全局 $post。

您需要添加全局 $post;或者您可以将 get_the_ID() 换成它的位置。

同样,你可以缩短它。

<?php $myvariable = ob_get_clean();
    return $myvariable;
    

短版本,因为没有理由只声明一个变量来返回。

<?php return ob_get_clean();

使用 $post->ID 进行测试

【讨论】:

我该怎么做?你能显示更正后的代码吗? 或在 ob_start() 之前;添加 $global $post; 不幸的是,这不起作用,当我更改 PHP 版本 7.3 时仍然出现错误 做了什么?我列出了两种方法。【参考方案2】:

您只需插入以下代码:

return ob_get_clean();

如果您的代码是:

.....
...
..

做:

return ob_get_clean();

对我来说很好用。

【讨论】:

【参考方案3】:

我想我发现了导致这个确切错误undefined constant _ - assumed '_' 的问题。 PHP 7 似乎对&lt;?php?&gt; 之前或之后的空格非常讲究。它引用“未定义常量”_ 的原因是因为字符 _ 可能是 Unicode 字符。在我的例子中,它是一个不间断空格的 Unicode,它恰好在 ?&gt; 之前。

在你的代码中,你说它在这一行 - 注意?&gt;之前的两个空格:

<span ...><?php echo ...get_field('price', $post->ID) );  ?></span>

我敢打赌,第二个空格实际上是一个 Unicode 字符,这就是导致警告的原因。就我而言,用实际空间覆盖它可以解决问题,即使它看起来完全一样。我可以通过在十六进制编辑器中打开它来确认我的字符是 Unicode 字符,该编辑器将“空格”显示为 0xC2A0,而不是通常的 0x20。我也检查了你的,但我猜它在粘贴到这个网站时被翻译成一个实际的空间。

更多信息:

What is “=C2=A0” in MIME encoded, quoted-printable text?

Warning: Cannot modify header information - headers already sent

【讨论】:

以上是关于警告:更新到 PHP 7.2 后使用未定义的常量 _ - 假定为“_”(这将在 PHP 的未来版本中引发错误)的主要内容,如果未能解决你的问题,请参考以下文章

PHP错误:警告:count():参数必须是实现Countable的数组或对象

Xcode 5.1 未使用的常量被视为错误

使用未定义的常量 MCRYPT_BLOWFISH

用homebrew将php 7.1升级到7.2后,无法在Mac上重启Apache

我想使用php 7.2使mcrypt在xampp窗口上工作错误:调用未定义的函数mcrypt_module_open()

Apache 更新后无法启动