什么时候需要括号来防止PHP IF子句中的PHP通知?

时间:2015-08-03 12:17:37

标签: php

我原本期望$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

5 个答案:

答案 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;
   ....
}

现在在上面的情况下,需要括号。 如果上面没有使用括号,您将无法获得预期的结果,否则您将收到错误。

由于