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

运算符优先级与短路求值:为何$x = false && print 'printed' || true;结果为false?

分步解析表达式 $x = false && print 'printed' || true; 的求值过程

先明确PHP里的核心规则:

  • 运算符优先级:&& > || > 赋值运算符=
  • 逻辑运算符&&和||都是短路求值:只要左边结果能确定整个表达式的最终值,右边代码就不会执行
  • print是语言构造,优先级低于&&和||,会被逻辑运算符的表达式包裹

正确求值步骤(结果应为true)

  1. 优先计算&&子表达式:false && print 'printed'

    • 因为&&短路求值,左边的false已经能确定整个&&表达式的结果是false,所以右边的print 'printed'不会执行(无任何输出)
    • 这一步的结果为false
  2. 计算||子表达式:false || true

    • ||短路求值,左边的false无法确定最终结果,因此计算右边的true
    • 这一步的结果为true
  3. 赋值给$x:$x = true

    • 最终$x的值为true

若你得到$x = false的常见原因

如果实际运行结果是$x = false,大概率是表达式写法或优先级理解出现偏差,常见两种情况:

  • 错误给print和||加了括号:比如写成$x = false && (print 'printed' || true)
    • 先算括号内的print 'printed' || true:print执行(输出printed),返回值为1(print始终返回1),1 || true结果为true
    • 再算false && true:短路求值,结果为false,最终$x = false
  • 混淆&&和and运算符:and优先级低于赋值运算符=,如果写成$x = false and print 'printed' || true
    • 会被解析为($x = false) and (print 'printed' || true),$x直接被赋值为false,后续逻辑运算不影响$x的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:08:08