)在返回命令中的用法

我遇到过||的一些有趣用法 如果有人能够确切地确认发生了什么(如果我明白了,我可以在将来自己使用它)。

代码是

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

$ neededRole和$ role都是null,'admin'或'manager'

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

我猜测,一旦达到'真正的'检查停止,并且如果它没有'真正'到达线的末尾,它将默认为假。

我接近标记了吗?


是的,你是对的。 这被称为短路评估。 如果所有条件评估为false,则最终返回值将为false || false || false false || false || false false || false || false ,这是错误的。

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


你是对的

查看手册中的示例

// 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());
链接地址: http://www.djcxy.com/p/10087.html

上一篇: ) usage in a return command

下一篇: How exactly does if($variable) work?