我很好奇PHP如何使用嵌套处理条件语句/操作顺序。如果我使用以下if
条件:
if(x == (1 || 2))
{
// do something
}
我希望它的行为与
相同if(x == 1 || x == 2)
{
// do something
}
......但事实并非如此。我的第一个例子似乎是一个方便的速记,非常有意义,但它没有做我期望的。任何人都可以对这个问题有所了解吗? PHP对我的第一个陈述究竟做了什么?
答案 0 :(得分:2)
您的简写在逻辑上无效。几乎在每种情况下,您都必须为要测试的所有可能性写出完整的逻辑案例。
我说'差不多'因为在PHP中你可以做一些荒谬的事情,如:
if( in_array($x, array(1,2)) ) {
// code!
}
答案 1 :(得分:2)
所以对于这段代码:
if ($x == ( 1 || 2))
{
// do something
}
在PHP中,任何非零数字都被认为是真的。免责声明:这一事实在其他语言中并不一定如此。所以在PHP中,0是唯一被认为是假的数字。所以你在上面的代码中询问是否$x == true
。
因此,只要$x
是0以外的任何数字,if
内的语句将解析为true
。但是,当$x = 0
时,这相当于说false == true
当然会解析为false
。
这篇文章可能有所帮助:PHP: Booleans
答案 2 :(得分:1)
x == (1 || 2)
evaluates like this:
(1 (if its false) then testing for 2, if not, the expression returns true)
now it will become:
if(x==true)?
取自(PHP.NET)的另一个例子:
// foo()永远不会被调用,因为那些运算符是短路的
$b = (true || foo());
答案 3 :(得分:1)
请在此处查看运营商的优先顺序 http://php.net/manual/en/language.operators.precedence.php
答案 4 :(得分:1)
它的行为与数学(想想BEDMAS)相同,首先执行括号。因此,您的示例表现为:
if (x == ( 1 || 2)) {
//code
}
因为1和2都是非零值(因此都是真的),你得到:
if (x == true) {
//code
}
不幸的是得到你想要的东西:
if (x == 1 || x == 2) {
//code
}
答案 5 :(得分:0)
首先,如果评估1||2
的结果并检查它是否等于x
其次是this or this or this
然而,首先你可以看到var_dump(1 || 2)
每次都返回true,所以
$x = 3;
var_dump($x == 1 || 2);
if($x == 1 || 2){
echo 'inside if';
}
也是true因此它会打印inside if
甚至$ x是3
所以imo第二种方式是要走的路
答案 6 :(得分:0)
怎么会有意义?您要求计算机执行以下逻辑表达式:
如果x ==(1 || 2)与 x ==(1 || 2的结果)相同
所以你的表达式是 x == true ,因为 1 || 2 会返回true
计算机会执行您要求他们执行的操作
答案 7 :(得分:0)
if(x == (1 || 2))
{
// do something
}
OR
和AND
操作通过TRUE
或FALSE
返回
你的陈述说 - 如果x等于(真) - 因为1 or 2
将永远为真
- 这没有意义......