PHP 7.4 中三元简写 ?: 判断 falsy 值(如 null、0、""、[] 等),非仅空值;推荐用 ?? 处理 null/未定义,需语义化“空”则显式用 empty()。

PHP 7.4 中三元运算符本身不直接“判断空值”,而是配合其他操作符(如 ?? 空合并运算符 或 empty()、isset())来实现对空值的判断和默认值处理。单纯用 ?:(三元简写形式)容易误判,需特别注意其行为逻辑。
理解 ?: 的真实含义
?: 是“空合并三元简写”,等价于:$a ?: $b ⇔ ($a) ? $a : $b,但这里的 $a 会进行“布尔求值”(falsy check),即当 $a 为以下任一值时,整个表达式返回 $b:
nullfalse-
0(整数零) -
0.0(浮点零) -
""(空字符串) -
[](空数组)
⚠️ 注意:它不是只判断“是否为空(empty)”,而是判断“是否为 falsy”。比如 0 或 "0" 行为不同:"0" ?: 'default' 返回 "0"(因为非空字符串是 truthy),而 0 ?: 'default' 返回 'default'。
更安全地判断“空值”:优先用 ?? 运算符
PHP 7.0+ 引入的空合并运算符 ?? 才是专门用于判断 null 或未定义变量的推荐方式:
-
$value ?? 'default':仅当$value为null或 未定义(undefined) 时返回'default';其它所有值(包括0、false、"")都原样返回。 - 支持链式:
$user['profile']['avatar'] ?? 'default.jpg'不会因中间键不存在而报 Notice。
需要语义化“空”(如 empty 字符串/0/false 都算空)?显式用 empty()
如果业务逻辑中认为 0、false、"" 都应视为“空”,就不要依赖 ?: 或 ??,改用明确函数:
empty($var) ? 'default' : $var- 或封装成一行:
!empty($var) ? $var : 'default'
✅ 这样逻辑清晰,避免歧义。例如:$count = 0;echo $count ?: 'N/A'; // 输出 'N/A' —— 可能不符合预期echo !empty($count) ? $count : 'N/A'; // 输出 0 —— 更符合“计数为 0 是有效值”的场景
小结:按场景选对操作符
- 只关心变量是否
null或未定义 → 用?? - 要兼容 PHP ?:,但务必确认
0/false是否真该被当作“空” - 需严格按业务定义“空”(如 trim 后为空、数组为空等)→ 显式用
empty()、isset()或自定义判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











