调用自静态方法不起作用

时间:2012-06-01 09:55:10

标签: php static operators

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

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),一切正常......
似乎运算符优先级在某种程度上涉及,但我错过了什么?

4 个答案:

答案 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吗?