我在Zend Framework项目的默认index.php文件中遇到了这个有趣的行:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
似乎在说“如果没有定义APPLICATION_PATH,那么继续并定义它......”
我不知道PHP中的这种控制结构。它几乎就像是“隐含的if”或“if / else”。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:16)
它不是一个控制结构 - 它只是||
的工作方式。如果第一个操作数被评估为true
- 则第二个操作数根本没有被评估。
http://php.net/manual/en/language.operators.logical.php ---查看样本的前4行。
// --------------------
// foo() will never get called as those operators are short-circuit
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
答案 1 :(得分:4)
||
是一个短路运营商。如果左侧操作数为true
,则整个表达式必须为true
,因此不会考虑评估右侧操作数。您可以以相反的方式使用&&
;如果左侧操作数为false
,则表达式整体必须为false
,因此不会对右侧操作数进行求值。
这是用其他语言做事的相当惯用的方式。对于这种情况,我通常更喜欢PHP中的显式if
。
答案 2 :(得分:2)
从技术上讲,这只是一些被评估的布尔表达式,但会抛弃结果。它使用短路逻辑来确保后半部分仅在前半部分为假时运行。
同样,您可以捕获结果:
$foo = false || true; // $foo will contain true.
答案 3 :(得分:2)
这是布尔表达式的short-circuiting evaluation,这确实是一种完成if-else之类的方法。