我遇到了一些有趣的||用法操作员在返回命令中,如果有人能确切地确认发生了什么(如果我理解了,我可以在将来自己使用它),我将不胜感激。
代码是
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。
我接近标记了吗?
答案 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());