php 5.5 支持简写三元运算符 ?:,用于 truthy 值判断赋值,如 $output = $value ?: 'default';它不检测变量是否存在,未定义时需配合 isset() 或升级至 php 7+ 使用 ?? 运算符。

PHP 5.5 支持标准三元运算符 ? : 和自 PHP 5.3 起引入的**简写三元运算符 ?:**,后者能显著简化常见赋值场景,尤其适用于“变量存在且为真则用它,否则用默认值”的逻辑。
用 ?: 替代重复变量名的三元判断
传统写法需两次写出变量名,冗余且易错:
$output = isset($value) ? $value : 'default';
在 PHP 5.5 中可直接简写为:
$output = $value ?: 'default';
该写法等价于 “若 $value 为 truthy(非空、非零、非 null、非 false),则取其值;否则取右侧默认值”。注意:它检测的是真假值(truthiness),不是仅限于 isset()。
处理未定义或 null 变量更安全的组合写法
?: 本身不检测变量是否已声明,直接使用未定义变量会触发 notice。稳妥做法是先用 isset() 或结合空合并思想:
- 推荐:用
isset($var) ? $var : 'default'—— 明确检查定义性 - 快速但需谨慎:用
@$var ?: 'default'(不推荐,错误抑制影响调试) - PHP 7+ 更优解:升级后改用
??运算符(如$output = $var ?? 'default';),它专为 null/未定义设计,比?:更精准
布尔型赋值直接映射数值
当变量本身就是布尔上下文(如开关、状态标志),可跳过显式比较:
$activeClass = $isActive ? 'active' : '';
进一步简化为:
$activeClass = $isActive ?: '';
这类写法语义清晰、无副作用,非常适合 Laravel 控制器、Blade 模板或 API 响应构造中动态设置字段。
避免嵌套和副作用,保持可读性
?: 仅适合单表达式、无副作用的赋值。以下情况应退回 if-else:
- 需要调用方法(如
$user->save() ? 'ok' : 'fail'—— 执行了动作,不是纯赋值) - 分支返回类型不一致(如一边返回字符串,一边返回数组)
- 嵌套三层以上(如
$a ?: ($b ?: ($c ?: 'none'))—— 难以维护)
PHP 5.5 不支持空合并赋值(??=)或链式空合并,这些是 PHP 7.4+ 和 8.0+ 的特性,当前版本请勿尝试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











