有趣的PHP语法:'暗示如果'?

Kim*_*nce 5 php zend-framework

我在Zend Framework项目的默认index.php文件中遇到了这个有趣的行:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Run Code Online (Sandbox Code Playgroud)

它似乎在说"如果没有定义APPLICATION_PATH,那么继续并定义它......"

我不知道PHP中的这种控制结构.它几乎就像是"隐含的if"或"if/else".任何人都可以帮我解决这个问题吗?

zer*_*kms 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());
Run Code Online (Sandbox Code Playgroud)

  • 相反,仅当第一个表达式为假时,才会计算第二个表达式. (3认同)
  • @Surreal Dreams:很明显 - 是的;-) (2认同)
  • 我知道你得到了它,但不是每个人都知道PHP或运营商是短路的.这里的要点是,当你必须首先在你的或操作员中选择要评估的内容时,选择一个最有可能真实的,并且失败的那个,那个评估速度更快的那个.如果你明智地选择,第二个可能永远不会被检查. (2认同)