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

PHP逻辑与赋值运算符优先级疑问:$x=2&&$y=3为何输出1:3?

为什么PHP代码$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;输出是1:3?

咱们先把代码摆出来方便对照:

$x = 2 && $y = 3;
echo (int)$x.':'.(int)$y; // 实际输出:1:3

你一开始的思路有点跑偏了,咱们一步步拆解实际的执行逻辑:

首先,你说的&&优先级高于=是对的,但关键是赋值运算符是右结合的,而且PHP里赋值表达式本身会返回被赋的值——这两点结合起来才是核心。

实际的表达式解析是这样的:
$x = (2 && ($y = 3))
而不是你想的$x = (2 && $y) = 3——后者完全不成立,因为赋值运算符左边必须是可写变量(左值),2 && $y是个表达式,根本没法被赋值,PHP解释器不会这么处理。

具体执行步骤:

  1. 先处理最右边的$y = 3:把3赋值给$y,同时这个赋值表达式的返回值是3(PHP里所有赋值操作都会返回被赋予的值)。
  2. 接着计算2 && 3:在PHP里,非零整数都会被判定为true,所以true && true的结果是true。
  3. 最后把true赋值给$x,当用(int)强制转换时,true会被转换成整数1。
  4. 所以最后输出就是1:3。

顺便验证下:如果你硬写$x = (2 && $y) = 3;,PHP会直接抛出语法错误Parse error: syntax error, unexpected '=',这也说明你的初始解析逻辑不成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:35