我有一个让我发疯的问题 我有一个静态类,我执行一些检查,这是代码:
class MyClass
{
public static function globalChecks()
{
$result = true;
$result = $result && self::checkAgency();
$result = $result && self::checkAttribs();
$result = $result && self::checkCategories();
$result = $result && self::checkDistricts();
$result = $result && self::checkTowns();
$result = $result && self::checkTypes();
$result = $result && self::checkUser();
return $result;
}
}
所有这些方法都被声明为公共和静态
好吧,如果我尝试运行它,PHP执行第一个,然后它只是跳过其他的
我试图在方法中调试或粗暴地放置die()
,但它不起作用。
如果我用方法调用切换变量(即self::method && $result
),一切正常......
似乎运算符优先级在某种程度上涉及,但我错过了什么?
答案 0 :(得分:2)
为什么不
public static function globalChecks()
{
return self::checkAgency()
&& self::checkAttribs()
&& self::checkCategories()
&& self::checkDistricts()
&& self::checkTowns()
&& self::checkTypes()
&& self::checkUser();
}
答案 1 :(得分:2)
只要您的某个方法调用将返回false,&&操作不会执行表达式的第二部分!自从False&&什么都是假的。
答案 2 :(得分:2)
一旦设置了第一个false,短路将导致方法调用被跳过 - 如果第一个条件为假,没有理由在“和”中运行它们。
答案 3 :(得分:0)
如果self::checkAgency()
返回false
,则$result
将为false
,并且由于对&&
等逻辑运算符的从左到右的评估,其他方法需要进行评估,因为评估是短路的。
您确定第一种方法在某些测试用例中返回true
吗?