php 7.2 中三元运算符按松散类型真值规则判断,falsy 值包括 false、null、0、0.0、''、'0'、[] 及未定义变量;其余均为 truthy;短三元 $a ?: $b 和空合并 $a ?? $b 语义不同,后者不触发 notice 且不依赖真值性。

PHP 7.2 中三元运算符的真值判断,完全遵循 PHP 的松散类型真值规则(truthy/falsy),不依赖变量类型本身,而是将条件表达式隐式转换为布尔值后判断。
条件部分只要被判定为“真”(truthy),就执行 ? 后的分支;否则执行 : 后的分支。
哪些值在 PHP 7.2 中会被判为假(falsy)
以下值在三元运算符的条件位置中一律视为 false:
-
false(布尔假) null- 整数
0 - 浮点数
0.0 - 空字符串
'' - 字符串
'0'(⚠️ 特殊:这是唯一一个非空但被当作 falsy 的字符串) - 空数组
[] - 未定义变量(如
$undefined,会触发Notice,但条件仍算 false)
✅ 示例:
$result = '0' ? 'yes' : 'no';→ 输出'no'$result = '00' ? 'yes' : 'no';→ 输出'yes'(因为'00'是非空字符串)
哪些值默认视为真(truthy)
几乎所有其他值都为真,包括:
- 非零数字(如
-1,3.14,0x10) - 非空字符串(如
' ','false','00','null','0.0') - 非空数组(如
[''],[0],['key' => 'val']) - 对象(即使属性为空)
- 资源(resource)、
true
✅ 示例:
$result = [] ? 'yes' : 'no';→'no'$result = [''] ? 'yes' : 'no';→'yes'
短三元写法(PHP 5.3+,7.2 完全支持)
$value = $input ?: 'default';
等价于:
$value = $input ? $input : 'default';
⚠️ 注意:它仍基于真值判断,所以如果 $input = '0' 或 $input = 0,也会取 'default' —— 这不是“是否为空”,而是“是否为 falsy”。
安全建议:避免真值陷阱
- 若你关心的是变量是否存在且非空,优先用
isset($var) && $var !== ''或!empty($var)(注意empty('0') === true,和三元一样); - 若需区分
'0'和'',必须显式比较:$value = ($var !== '' && $var !== null) ? $var : 'default';
- 对用户输入或数组键,推荐用空合并运算符
??(PHP 7.0+):$name = $_GET['name'] ?? 'Guest'; // 不触发 notice,也不依赖真值性
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











