You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP空合并运算符替代if语句未达预期,请求排查代码错误

PHP空合并运算符改写问题分析

问题场景

我看过不少PHP三元运算符的文章,但还是搞不定这个代码改写。下面是能正常运行的原始代码:

if ( get_field('fs_ski_resort_data_fs_name') != null && !empty(get_field('fs_ski_resort_data_fs_name') ) )
{
    $the_name = get_field('fs_ski_resort_data_fs_name');
} else  {
    $the_name = get_field('fs_ski_resort_data_osm_name');
}   
echo 'The name'.$the_name;

但改成用空合并运算符的代码后,无法得到和原代码一致的结果:

$the_name = get_field('fs_ski_resort_data_fs_name') ?? $the_name = get_field('fs_ski_resort_data_osm_name');
echo $the_name;

错误原因

  • 逻辑匹配偏差:原代码同时判断了!= null和!empty(),但PHP的??(空合并运算符)仅检查值是否为null或未定义,不会处理空字符串、0这类empty()会判定为“空”的内容。比如当get_field('fs_ski_resort_data_fs_name')返回空字符串时,原代码会走else分支,但??会直接将空字符串赋值给$the_name,导致结果不符。
  • 语法冗余且优先级问题:你在??右侧重复写了$the_name =,这属于冗余写法,同时会因运算符优先级导致意外行为。空合并运算符的正确格式是$变量 = 表达式A ?? 表达式B,无需重复赋值。

正确写法

写法一(完全匹配原逻辑)

先存储字段值避免重复调用get_field(),再用三元运算符结合!empty()判断:

$fs_name = get_field('fs_ski_resort_data_fs_name');
$the_name = !empty($fs_name) ? $fs_name : get_field('fs_ski_resort_data_osm_name');
echo $the_name;

写法二(简化场景)

如果业务中确认get_field()返回的有效内容不会是empty()判定为空的情况(如空字符串、0),可以用简化的空合并运算符写法:

$the_name = get_field('fs_ski_resort_data_fs_name') ?? get_field('fs_ski_resort_data_osm_name');
echo $the_name;

内容的提问来源于stack exchange,提问作者spreaderman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:12:21