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。)