You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在赋值运算符左侧使用三元运算符?附代码示例

三元运算符作为赋值左值的可行性分析

好问题!咱们逐个拆解你提到的三种PHP写法,看看哪些可行、哪些不行,背后的逻辑是什么:

1. (true ? $a : $b) = 5; → 不可行,会报错

PHP里的三元运算符?:默认返回的是值的拷贝,而不是对变量的引用。赋值运算符左侧需要的是一个「可被赋值的目标」(比如变量本身、引用变量),但这个表达式返回的是临时值,没法作为左值接受赋值。运行这段代码会直接抛出语法错误,提示你不能对表达式结果赋值。

2. (true ? &$a : &$b) = 5; → 可行

当三元运算符的两个分支都返回引用(通过&标记变量)时,整个三元表达式的结果会是一个引用,而不是值拷贝。这时候它就满足了左值的要求——相当于直接操作对应的变量。比如你写的例子里,因为条件为true,所以实际是对$a的引用赋值,最终$a的值会变成5。

需要注意的是:这种写法要求两个分支必须都是引用类型,不能一个是引用一个是普通值,否则PHP会报错,因为三元运算符的返回类型必须一致。

3. &(true ? $a : $b) = 5; → 不可行,会报错

你试图对三元表达式的结果取引用,但三元表达式默认返回的是临时值(不是变量本身),PHP不允许对临时值创建引用——毕竟临时值没有持久的内存地址,没法被引用指向。这段代码运行时会抛出语法错误,提示「不能对表达式结果取引用」。

总结一下:只有当三元运算符的两个分支都返回引用时,整个表达式才能作为左值使用;其他两种写法都不符合PHP的语法规则。

内容的提问来源于stack exchange,提问作者gom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:39:09