2012-06-01 6 views
0

У меня проблема, которая сводит меня с ума.
У меня есть статический класс, где я выполнить некоторые проверки, это код:Call to self static method not working

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) все работает ...
Кажется, оператор старшинства участвует в некотором роде, но я что-то отсутствует?

ответ

2

как только один из вашего вызова метода вернет ложь, тем & & операция не будет выполнена вторая часть выражения! поскольку False & & что-то False.

2

Почему просто не

public static function globalChecks() 
{ 
    return self::checkAgency() 
    && self::checkAttribs() 
    && self::checkCategories() 
    && self::checkDistricts() 
    && self::checkTowns() 
    && self::checkTypes() 
    && self::checkUser(); 
} 
+1

+1/2, не объясняет, что происходит, но соответствующая очистка. –

2

Как только первое ложное значение установлено, короткое замыкание вызовет пропуски вызовов метода - нет причин запускать их в «и», если первое условие является ложным.

0

, если self::checkAgency() возвращает false, $result будет false и из-за левой-направо оценки логических операторов, таких как &&, ни один из других методов не должны быть оценены как оценка короткое замыкание.

Вы уверены, что этот первый метод возвращает true в некоторых ваших тестовых случаях?