警告:更新到 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->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->ID
应该是 woocommerce 产品 ID 吗?
它是 ACF(高级自定义字段)的一部分
如果你输入number_format(floatval(get_field('price', $post->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 似乎对<?php
和?>
之前或之后的空格非常讲究。它引用“未定义常量”_
的原因是因为字符 _
可能是 Unicode 字符。在我的例子中,它是一个不间断空格的 Unicode,它恰好在 ?>
之前。
在你的代码中,你说它在这一行 - 注意?>
之前的两个空格:
<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的数组或对象
用homebrew将php 7.1升级到7.2后,无法在Mac上重启Apache
我想使用php 7.2使mcrypt在xampp窗口上工作错误:调用未定义的函数mcrypt_module_open()