2015-03-19 48 views
0

我如果... ELSEIF ... else語句喜歡這樣的鏈條:如何使用「class_exists」條件裏面,如果...... ELSEIF

if (!empty($video_meta)) { 
    echo 'foo'; 
} elseif (WPCOM_Liveblog::is_liveblog_post()) { 
    echo 'bar'; 
} elseif (has_tag('featured')) { 
    echo 'foobar'; 
} 

第二elseif的語句是在一個特定的依賴WordPress插件(liveblog)被激活。如果插件未處於活動狀態,則該函數將拋出致命錯誤,因爲類WPCOM_Liveblog不存在。

我試圖用一個嵌套的IF語句這樣

if (has_post_format('video')) { 
    echo 'foo'; 
} elseif (class_exists('WPCOM_Liveblog')) { 
    if (WPCOM_Liveblog::is_liveblog_post()) { 
     echo'bar'; 
    } 
} elseif (has_tag('featured')) { 
    echo 'foobar'; 
} 

如果第二個條件是假的,它永遠不會來的原因很明顯最終ELSEIF。 class_exists條件始終評估爲true,並且if語句鏈終止。

我不能使用簡單的&&條件,因爲我正在尋找一個停用的插件,第二個條件只會爲未知的類拋出一個致命錯誤。

我也不能改變if ... elseif語句的順序。訂單背後有一個目的。

這感覺就像一個簡單的PHP問題,但我很難過。無論如何,我可以嵌入elseif的另一個條件嗎?基本上,如果條件的第一部分爲真,則執行第二個條件。如果兩者均爲真,則返回至elseif。如果該類不存在,則第二個有條件檢查不會觸發。

+0

你說:「如果條件的第一部分是真的,執行第二個條件」這是你的第一部分條件和第二條件?你能在你的代碼中解釋你問題的最後部分嗎? – 2015-03-19 02:59:41

回答

0

在PHP中的條件是爲了從左至右執行的,所以你可以做到以下幾點:

elseif (class_exists('WPCOM_Liveblog') && WPCOM_Liveblog::is_liveblog_post()) { 
    echo'bar'; 
} 

證明(通過ideone):http://ideone.com/fAN2YK

0

或者,你可以移動未通過測試走出循環:

$plugin_loaded = false; 
if (class_exists('WPCOM_Liveblog')) { 
    $plugin_loaded = (WPCOM_Liveblog::is_liveblog_post()) ? true : false; 
} 

if (has_post_format('video')) { 
    echo 'foo'; 
} elseif ($plugin_loaded) { 
    echo 'bar'; 
} elseif (has_tag('featured')) { 
    echo 'foobar'; 
}