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

是否存在类似PHP 7 Null合并运算符的Empty合并运算符?

关于PHP中针对empty判断的类似运算符问题

PHP并没有原生提供对应empty()判断的语法糖(类似??那种null合并运算符),不过我们有几种简洁的方式来实现你要的效果——就是当目标值不存在、为空字符串、0、false、null等所有empty()返回true的场景时,返回指定默认值。


方案1:直接结合empty()与三元运算符

这是最直观且完全匹配需求的写法:

$number = !empty($_GET['number']) ? $_GET['number'] : 'no number or number is 0 or empty';

这里empty($_GET['number'])会覆盖所有你提到的场景:参数不存在、为空字符串、为0,甚至是false或null的情况,只要empty()返回true,就会触发默认值。

方案2:封装自定义函数(适合高频复用场景)

如果你的项目里经常需要这类判断,封装一个函数会让代码更整洁,还能避免重复逻辑:

function getNonEmptyOrDefault($value, $default) {
    return !empty($value) ? $value : $default;
}

// 调用时用`?? null`避免Undefined Index警告(高报错等级下更健壮)
$number = getNonEmptyOrDefault($_GET['number'] ?? null, 'no number or number is 0 or empty');

添加$_GET['number'] ?? null是为了防止当number参数完全不存在时,PHP抛出Undefined Index的警告,让代码更严谨。

方案3:用filter_input配合简写三元运算符

如果是直接处理GET/POST这类全局输入,filter_input是更安全的选择,它能自动处理参数不存在的情况,再配合?:(三元运算符的简写,左边为“假值”时返回右边):

$number = filter_input(INPUT_GET, 'number', FILTER_UNSAFE_RAW) ?: 'no number or number is 0 or empty';

filter_input在number参数不存在时返回null,存在但为空/0时返回对应值;而?:会把null、''、0、false都判定为“假值”,刚好契合你的需求。注意FILTER_UNSAFE_RAW不对参数做过滤,若需要转义或验证,可替换为FILTER_SANITIZE_STRING等其他过滤器。


补充说明:??运算符仅判断变量是否为null或未定义,而你需要的是覆盖所有empty()判定的“假值”场景,因此没有原生运算符能直接实现,以上几种方案均可完美替代。

内容的提问来源于stack exchange,提问作者I am the Most Stupid Person

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:33:25