php或运算符有几种写法_php或运算符||与or区别【选择】

2次阅读

不能。php中||和or优先级不同:||高于赋值运算符=,适合布尔判断;or低于=,等价于($a=$b) or $c,仅适用于控制流场景如or die(),日常逻辑判断应统一使用||。

php或运算符有几种写法_php或运算符||与or区别【选择】

PHP 中 ||or 真的可以互换吗?

不能。它们优先级不同,混用可能让代码逻辑彻底跑偏——尤其在赋值语句里。

比如 $a = $b || $c$a = $b or $c 行为完全不同:|| 会先算逻辑结果再赋值;or 因为优先级低,实际等价于 ($a = $b) or $c,即先赋值、再单独执行 $c(且其结果被丢弃)。

  • || 优先级高于赋值运算符 =,适合常规布尔判断和短路求值
  • or 优先级低于 =,几乎只该用在控制流场景,比如 do_something() or die('fail')
  • if ($a || $b) 没问题;但写 if ($a or $b) 虽语法合法,却容易让人误判优先级,不推荐

PHP 还有哪些“或”写法?它们各自适用什么场景?

除了 ||or,还有 |(按位或)和空合并运算符 ?? ——但后两者根本不是逻辑“或”,只是名字带“或”字,容易混淆。

  • | 是整数/字符串的按位运算,5 | 37,不是布尔判断,别拿来替代 ||
  • ?? 是空合并,只检测 NULL 或未定义,$x ?? 'default'$x || 'default'(后者会把 0false'' 都当假值处理)
  • 真·逻辑或就只有 ||or 两种,其他都是“看起来像但不是”

为什么线上代码常看到 or die() 却不用 || die()

这是历史惯用法,靠的是 or 的低优先级实现“失败即终止”的意图表达,本质是利用副作用。

立即学习PHP免费学习笔记(深入)”;

  • mysql_connect(...) or die('connect failed'):连接失败时执行 die,成功时整个表达式值为 true,但没人关心这个值
  • 换成 || 就不行:mysql_connect(...) || die('connect failed') 语法上没问题,但 die() 返回 null,可能干扰后续逻辑(比如你在链式调用里用它)
  • 现代写法更倾向用异常:try { ... } catch (...) { ... },避免依赖运算符副作用

实际项目中该选哪个?有没有统一建议?

绝大多数时候只用 ||,把 or 当作遗留写法看待。

  • 所有条件判断(ifwhile、三元表达式)一律用 ||
  • 明确需要“执行 A,失败就执行 B”且不关心返回值时,才考虑 or,但建议改用 if (!A()) { B(); } 更清晰
  • 团队代码规范若禁用 or,就别碰它——它带来的可读性代价远大于那点缩写便利

真正难的不是记清区别,而是排查那种 $res = $a or $b 看似无害、实则 $res 总是 $a 的隐性 bug

text=ZqhQzanResources