PHP简写逻辑运算符AND和OR

可能重复:
PHP和/或关键字
PHP简写语法

快速提问。 我一直在这个地方的图书馆里看到速记表达,尽管我已经是一名PHP开发人员已经有3年多了,但我很难理解下面的评估方式。

当PHP解释器遇到它时,它究竟用下面这些简短的代码行来做什么?

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

    $foo AND $this->bar();

我猜测它很明显是有条件的执行 - 也就是说,除非第一位是真的,否则第二条语句不会被执行......但是使用位运算符会让我困惑。

有人可以详细说明吗?

谢谢 :)


当我学习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 == c只会在!= b时才被测试。

在这种情况下,您依靠此命令在特定条件下运行命令(退出或$ this-> bar())。

注意...在这种情况下,exit()是一个糟糕的主意 - 如果你退出('出错了'),没有人可以做这件事来隐藏用户的错误,也可能发出200 OK HTTP状态一个500内部服务器错误会更合适,我会考虑更类似于:

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

在这里你有机会捕捉异常,或者至少让PHP抓住并发出500的状态。


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

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

true OR do_something();

该表达式从不调用do_something(),因为OR的第一个操作数是真的,所以整个表达式必须为真。


比你想象的要复杂得多。 or关键字与||相同 ,但优先级较低。 详细信息请参见相应的PHP页面。

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

链接地址: http://www.djcxy.com/p/57629.html

上一篇: PHP shorthand logical operators AND and OR

下一篇: PHP : Difference between '&&' and 'AND'