2012-06-01 48 views
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; 
    } 
} 

所有這些方法被聲明爲公共的和靜態。
那麼如果我嘗試運行它,PHP執行第一個,然後它簡單地跳過其他的。
我試圖調試或粗暴地把die()裏面的方法,但它不起作用。

如果我切換變量,方法調用(即self::method && $result)一切正常......
它似乎運算符優先級參與了一些辦法,但我失去的東西嗎?

回答

2

只要你的方法調用將返回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$resultfalse因爲邏輯運算符,如&&左到右的評估,需要評估沒有其他方法作爲評價短路。

你確定這個第一個方法在你的一些測試用例中返回true

相關問題