php 7.3三元运算符真值判断沿用松散规则:false、0、0.0、''、'0'、null、[]及未定义变量为falsy,其余均为truthy;'0'是唯一falsy字符串,需特别注意。

PHP 7.3 中三元运算符的真值判断逻辑和之前版本完全一致,不因版本升级而改变。它的核心是 PHP 的“松散真值性”(truthiness)规则:条件部分不是严格检查是否为 true,而是将任意值隐式转换为布尔值来决定走哪一分支。
三元运算符的基本形式
$result = $condition ? $value_if_true : $value_if_false;
其中 $condition 被当作布尔上下文求值——即进行真值判断。
哪些值会被判为“假”(falsy)
在 PHP 7.3 中,以下值在三元运算符的条件位置会被视为 false:
- 布尔值
false - 整数
0 - 浮点数
0.0 - 空字符串
'' - 字符串
'0'(这是容易忽略的特例) null- 空数组
[] - 未定义变量(访问时会触发
Notice,但条件本身仍被当作false)
其余所有值均为“真”(truthy),例如:
-
'00'、'0.0'、'false'、' '(含空格)→ 都是 true - 非零数字(如
-1、3.14) - 非空数组(如
[0]、['']) - 对象(即使属性为空)
实际判断示例
// 这些都会进入 : 分支(因为条件为 falsy)
var_dump('' ?: 'default'); // 'default'
var_dump('0' ?: 'default'); // 'default' ← 注意!'0' 是 falsy
var_dump(0 ?: 'default'); // 'default'
var_dump(null ?: 'default'); // 'default'
// 这些会进入 ? 分支(因为条件为 truthy)
var_dump('00' ?: 'default'); // '00'
var_dump([0] ?: 'default'); // Array ( [0] => 0 )
var_dump([''] ?: 'default'); // Array ( [0] => '' )
var_dump(-5 ?: 'default'); // -5
更安全的替代方案(推荐用于用户输入或配置)
由于 '0' 和 0 都判为假,仅靠三元运算符可能误伤有效数据。建议按场景选择更明确的判断方式:
-
判断变量是否已设置且非空(排除
null、''、[]等):$name = $_GET['name'] ?? ''; // 先兜底防未定义 $display = !empty($name) ? $name : '游客';
-
判断键是否存在且不为 null(推荐用空合并运算符
??):$user = $data['username'] ?? '匿名'; // PHP 7.0+
-
PHP 7.3 新增的
??=更适合赋默认值:$config['timeout'] ??= 30; // 仅当为 null 或未定义时赋值
小结关键点
- 三元运算符本身不做类型强制,只做真值转换;
-
'0'是唯一字符串型 falsy 值,务必留意; - 短写法
$x ?: $y等价于$x ? $x : $y,同样受 falsy 规则影响; - 复杂业务逻辑别硬套三元,该用
if就用if,可读性优先。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











