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

PHP中if语句的或运算是否存在更简洁的写法?

关于PHP中if条件简化写法的问题解答

嘿,这个问题问得挺务实的——想简化重复的变量比较很合理,但咱们得先搞清楚这两种写法的本质逻辑差异,不然容易踩坑:

两种写法的逻辑完全不同

先看你提到的示例:

  • 原写法:if( 0 == 0 || 0 == 1 ) dump('42');
    这里是先分别判断0==0(结果为true)和0==1(结果为false),再通过||逻辑或运算,最终整个条件是true || false = true,所以会执行dump('42')。

  • 你想简化的写法:if( 0 == ( 0 || 1 )) dump('42');
    这里的优先级是先算括号里的0 || 1——PHP中||逻辑或的返回规则是:返回第一个为“真”的操作数,若所有操作数都为假则返回最后一个假值。0是假值,1是真值,所以0 || 1的结果是1。然后整个条件变成0 == 1,结果是false,根本不会执行dump('42')。

这就说明,这种简化写法直接改变了原逻辑,完全达不到你想要的效果,更别说提升效率了。

正确的简化方式

如果你的场景是同一个变量和多个值比较(比如$var == 0 || $var == 1 || $var == 2),想要减少变量重复书写,推荐这两种方式:

  1. 使用in_array()函数:
    if (in_array($var, [0, 1, 2])) {
        dump('42');
    }
    
    要是需要严格比较(类型和值都匹配),记得加上第三个参数true:
    if (in_array($var, [0, 1, 2], true)) {
        dump('42');
    }
    
  2. PHP 8.0+ 可以用in运算符(语法更简洁):
    if ($var in [0, 1, 2]) {
        dump('42');
    }
    
    这个运算符默认就是严格比较,和in_array($var, [...], true)效果一致。

总结

你提到的那种括号包裹逻辑或的写法不能用,因为它完全改变了原条件的判断逻辑。想要简化重复的多值比较,用in_array()或者PHP8的in运算符才是正确的做法,既保证逻辑正确,又提升了代码可读性。

内容的提问来源于stack exchange,提问作者Jonas de Herdt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:59