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),想要减少变量重复书写,推荐这两种方式:
- 使用
in_array()函数:
要是需要严格比较(类型和值都匹配),记得加上第三个参数if (in_array($var, [0, 1, 2])) { dump('42'); }true:if (in_array($var, [0, 1, 2], true)) { dump('42'); } - 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
相关产品推荐
相关产品推荐

