PHP简写逻辑运算符AND和OR

时间:2011-06-20 13:39:39

标签: php logical-operators

  

可能重复:
  PHP - and / or keywords
  PHP shorthand syntax

快速提问。我一直在这个地方的图书馆看到速记表达,尽管已经有3年多的PHP开发人员,但我很难看到以下内容将如何评估。

PHP解释器遇到以下简写代码时究竟做了什么?

<?php
    defined('foo') OR exit('foo is not defined!');

    $foo AND $this->bar();

我猜测它显然是条件执行 - 即第二个语句不会被执行,除非第一个位是真的......但是使用按位运算符会让我感到困惑。

有人可以详细说明吗?

谢谢:)

4 个答案:

答案 0 :(得分:4)

我认为这是一种短路评估形式:http://en.wikipedia.org/wiki/Short-circuit_evaluation

基本上,在评估整个表达式时,解释器一旦确定结果就会短路。例如:

true OR do_something();

此表达式从不调用do_something(),因为OR的第一个操作数为true,因此整个表达式必须为true。

答案 1 :(得分:2)

比你想象的要简单得多。 or关键字与||相同,但优先级较低。有关详细信息,请参阅corresponding PHP page

该语句的实际执行依赖于涉及逻辑运算符的单独概念:短路。这意味着,在or的情况下,如果第一个语句结果为真,则不评估第二个语句。 (因为在条件中,例如,整个条件将返回true,而不需要看到后半部分。)

答案 2 :(得分:2)

当我学习PHP时,我记得在阅读'do or die'样式命令时并没有完全理解它们,经典的例子是:

mysql_connect() or die('couldn\'t connect');

请记住,条件只有在需要时才会运行,例如:

if (a == b && b == c)

此处b == c仅在a == b时进行测试。同样的理论适用于或:

if (a == b || b == c)

现在只有在!= b。

时才会测试b == c

在这种情况下,您依靠此订单在某些条件下运行命令(exit或$ this-&gt; bar())。

要意识到...... 退出()在这种情况下是一个坏主意 - 如果你退出('出错了'),没有人可以做任何事情来隐藏用户的这个错误,它可能会发出200 OK HTTP状态,其中500内部服务器错误会更合适,我会考虑更像:

defined('foo') OR throw new Exception('foo is not defined!');

在这里,您有机会捕获异常或至少让PHP捕获它并发出500状态。

答案 3 :(得分:1)

有时候你的功能看起来像是:

function test()
{
    $foo = TRUE;
    $bar = FALSE;

    return $foo && $bar;
}

在这种情况下,如果有人这样做:

 $bla = test();
 if($bla) {
   ... do something
 }

“......做某事”不会被执行,因为整个函数返回false。

返回$ foo&amp;&amp; $ bar表示两个变量必须为true才能使函数返回true。

另一方面,如果它声明:return $ foo || $酒吧;那么函数将返回true,因为至少有一个变量为真。