0

我有一个让我发疯的问题。
我有一个静态类,我在其中执行一些检查,这是代码:

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;
  }
}

所有这些方法都被声明为 public 和 static。
好吧,如果我尝试运行它,PHP 会执行第一个,然后它会跳过其他的。
我试图调试或粗暴地die()在方法内部放置一个,但它不起作用。

如果我用方法调用(即self::method && $result)切换变量一切正常......
似乎运算符优先级以某种方式涉及,但我错过了什么吗?

4

4 回答 4

2

为什么不只是

public static function globalChecks()
{
  return self::checkAgency()
   && self::checkAttribs() 
   && self::checkCategories()
   && self::checkDistricts()
   && self::checkTowns()
   && self::checkTypes()
   && self::checkUser();
}
于 2012-06-01T09:58:23.727 回答
2

一旦您的方法调用之一返回 false,&& 操作将不会执行表达式的第二部分!因为 False && 任何东西都是 False。

于 2012-06-01T10:01:51.833 回答
2

一旦设置了第一个 false,短路将导致方法调用被跳过——如果第一个条件为 false,则没有理由在“and”中运行它们。

于 2012-06-01T10:02:04.863 回答
0

如果self::checkAgency()返回false,$result将是false并且由于逻辑运算符(例如 )的从左到右求值,&&其他方法都不需要求值,因为求值是短路的。

您确定第一种方法true会在您的某些测试用例中返回吗?

于 2012-06-01T10:03:39.230 回答