我原本期望$x->p
永远不会被解决,因为第一个条件!$x=getIt()
是真的,但前两个例子的情况并非如此。
IF子句中何时需要括号?
<?php
if(!$x=getIt() || ($x->p) ){echo('yes1');}
else {echo('no1');}
if(!$x=getIt() || $x->p ){echo('yes2');}
else {echo('no2');}
if(!($x=getIt()) || ($x->p) ){echo('yes3');}
else {echo('no3');}
if(!($x=getIt()) || $x->p ){echo('yes4');}
else {echo('no4');}
function getIt(){return false;}
?>
输出
Notice: Undefined variable: x in /var/www/html/test.php on line 3
Notice: Trying to get property of non-object in /var/www/html/test.php on line 3
yes1
Notice: Trying to get property of non-object in /var/www/html/test.php on line 6
yes2yes3yes4
答案 0 :(得分:2)
逻辑运算符||
的优先级高于赋值运算符=
。所以
!$x = getIt() || $x->p
被视为:
!$x = (getIt() || $x->p)
当getIt()
返回假值时,这将在分配变量之前以及$x
反转结果之前访问!
的属性。
您需要使用括号来覆盖此优先级。您也可以使用or
代替||
,因为它的优先级较低。
if (!$x = getIt() or $x->p)
答案 1 :(得分:0)
我说永远使用它是个好习惯。一旦你开始使用带有预处理器的语言,你一定会感谢你自己。
答案 2 :(得分:0)
我出于以下原因使用大括号
答案 3 :(得分:-1)
注意没有错误。
第一个通知说变量x没有声明(所以你以前从未分配过它)
其他人只是很好地告诉你,$ x-&gt; p什么都不做,因为$ x不是对象,因此没有属性
对于括号问题,请参阅其他答案
答案 4 :(得分:-1)
正如Marcin所说,总是使用它们是一个好习惯。 但是在php中,如果IF语句体是单行,那么就没有必要使用括号。见下面的例子:
if(your condition)
some php code here;
以上示例很好,可以使用。
现在,如果IF语句的主体有多行代码,那么你必须使用括号。请查看以下示例。
if(your condition) {
some php code here;
some more code here;
....
}
现在在上面的情况下,需要括号。 如果上面没有使用括号,您将无法获得预期的结果,否则您将收到错误。
由于