PHP中$a ?: $b与!empty($a) ? $a : $b是否等价?
PHP三元简写与!empty()三元表达式的功能差异
结论:不完全相同,核心差异集中在未定义变量的处理和语法兼容范围,具体分析如下:
核心逻辑对比
$a ?: $b:判断$a在布尔上下文中是否为true,是则返回$a,否则返回$b。!empty($a) ? $a : $b:判断$a是否不满足empty()的空值判定规则,是则返回$a,否则返回$b。
关键差异点
1. 未定义变量的处理
如果$a是未定义的变量:
$a ?: $b会直接抛出E_NOTICE级别的警告(提示“Undefined variable”);!empty($a) ? $a : $b不会触发任何警告——empty()函数本身对未定义变量是安全的,会直接判定为“空”并返回$b。
2. 空值判定的重合场景
大部分日常场景下两者结果一致,因为empty()的判定范围几乎覆盖了布尔上下文为false的所有值:
empty()视为“空”的值包括:""、0、0.0、"0"、null、false、array()、无属性的对象。这些值在布尔上下文中也会被转为false,此时两个表达式返回结果相同。
3. 语法兼容版本
$a ?: $b是PHP 5.3及以上版本才支持的简写语法;!empty(...)的三元写法兼容PHP 4及以后的所有版本。
示例验证
// 情况1:$a = 0 $a = 0; echo $a ?: "b"; // 输出 "b" echo !empty($a) ? $a : "b"; // 输出 "b" → 结果一致 // 情况2:$a未定义 // echo $a ?: "b"; // 抛出Undefined variable警告 echo !empty($a) ? $a : "b"; // 输出 "b" → 结果不同 // 情况3:$a = "test" $a = "test"; echo $a ?: "b"; // 输出 "test" echo !empty($a) ? $a : "b"; // 输出 "test" → 结果一致
内容的提问来源于stack exchange,提问作者Nicholas Gooding Rios
相关产品推荐
相关产品推荐

