确认返回命令中的OR(||)用法

时间:2011-08-06 16:48:49

标签: php

我遇到了一些有趣的||用法操作员在返回命令中,如果有人能确切地确认发生了什么(如果我理解了,我可以在将来自己使用它),我将不胜感激。

代码是

    return (
        empty($neededRole) ||
        strcasecmp($role, 'admin') == 0 ||
        strcasecmp($role, $neededRole) == 0
    );

$ neededRole和$ role为null,'admin'或'manager'

我正在读它:
如果$neededRole为空,则不需要进一步检查。返回true(并停止检查)
如果($role == 'admin')允许访问,则无论所需角色如何。返回true(并停止检查)
如果($role == $neededRole)则允许访问。返回true(并停止检查)

我猜测在达到'true'时检查停止,如果它到达行的末尾没有'true',它将默认为false。

我接近标记了吗?

2 个答案:

答案 0 :(得分:7)

是的,你是对的。这称为short-circuit evaluation。如果所有条件评估为false,则最终返回值为false || false || false,这是假的。

作为旁注,这也适用于&&运算符,但当第一个表达式产生false值时,它会停止评估。

答案 1 :(得分:0)

是的,你是对的

查看manual

中的示例
// 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());