2010-08-02 22 views
4

這應該是一個簡單的問題。我有一個簡單的if/else語句:if和elseif有什麼區別?

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'page1.png'; 
    } 
    if (is_page('aboutus')) { 
     $toppic = 'page1.png'; 
    } 
    if (is_page('newspaper')) { 
     $toppic = 'page1.png'; 
    } 
    else { 
     $toppic = 'page1.png'; 
    } 
?> 

有從^^^這種差異:

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'page1.png'; 
    } 
    elseif (is_page('aboutus')) { 
     $toppic = 'page1.png'; 
    } 
    elseif (is_page('newspaper')) { 
     $toppic = 'page1.png'; 
    } 
    else { 
     $toppic = 'page1.png'; 
    } 
?> 

我應該指出,這是怎麼回事到WordPress。直到現在,我已經使用了第一部分(沒有elseif,只是一系列的'ifs'),它的工作原理。我只是想知道有什麼不同。

謝謝! Amit

+2

Dupe of http://stackoverflow.com/questions/637980/if-else-and-if-elseif或http://stackoverflow.com/questions/2881560/is-using-if-elseif-elseif-better - 使用如果,如果如果或...? – 2010-08-02 05:27:16

+0

在你的情況下,它不關心你使用哪一個,但如果你有一些函數檢查一些事情,它可以用elseif更快,它只檢查,直到某些條件符合條件 – domiSchenk 2010-08-02 07:34:55

+0

謝謝,非常感謝。 – Amit 2010-08-02 08:31:43

回答

16

是的。如果滿足if/else控件中的條件,則其餘的檢查將被省略。 else if只是else內嵌套的if

if (is_page('english')) { // if true, other statements are skipped 
    $toppic = 'page1.png'; 
} 
elseif (is_page('aboutus')) { 
    $toppic = 'page1.png'; 
} 
elseif (is_page('newspaper')) { 
    $toppic = 'page1.png'; 
} 
else { 
    $toppic = 'page1.png'; 
} 

但在一系列if S,所有的人都將受到考驗。

if (is_page('english')) { 
    $toppic = 'page1.png'; 
} 
if (is_page('aboutus')) { // will be tested no matter what the outcome 
          // of the previous if statement was 
    $toppic = 'page1.png'; 
} 
if (is_page('newspaper')) { // the same here 
    $toppic = 'page1.png'; 
} 
else { 
    $toppic = 'page1.png'; 
} 

所以,如果你正在檢查一個屬性,如一些平價,它是奇數或偶數,你爲什麼要打擾檢查其他條件,如果一個是滿意的。這是浪費資源。因此,下面的代碼比

if(number_is_odd) { 
} 

if(!number_is_odd) { 
} 

更好

if(number_is_odd) { 
} 
else { // if it's not odd, it's even for sure 
} 

因爲前檢查條件,一旦而後者則兩次。具有兩種以上狀態的情況也是如此。

+0

明白了。感謝您使它更清晰! – Amit 2010-08-02 05:39:33

+0

我在PHP指南中看到過更糟糕的例子。做得好! – Drew 2010-08-02 07:08:54

+0

雖然這是一個很好的答案,對於這個問題中概述的情況,它應該被設置爲一個「switch」語句,因爲每個if都在評估相同的主題項目... – Martin 2016-07-01 14:39:54

2

第一種方法將檢查每個條件,無論它們是真的還是假的。

第二種方法將檢查每個條件,直到一個爲真,然後忽略其餘。

2

在您的第一個塊中,塊中的每個比較都會執行。此外,toppic將始終分配is_page('newspaper')中的值或is_page('newspaper')的else語句中的值。發生這種情況是因爲最後一個陳述總是被評估。即使前面的if語句之一評估爲true,您也會在else塊中結束。爲了測試這個,試試這個代碼...

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'english.png'; 
    } 
    if (is_page('aboutus')) { 
     $toppic = 'aboutus.png'; 
    } 
    if (is_page('newspaper')) { 
     $toppic = 'newspaper.png'; 
    } 
    else { 
     $toppic = 'finalelse.png'; 
    } 
?> 

你永遠以「newspaper.png」或「finalelse.png」結束。

1

兩者最大的區別在於,只要is_page('newspaper')返回false,就會調用最後一個else塊。在這種情況下,這意味着幾乎每次腳本運行。在這種情況下,這不是什麼大問題,因爲你只設置了一個變量,並且與其他所有變量的值相同。但是,如果它不同,你會有一個非常令人沮喪的錯誤追蹤!

除此之外,如果您使用單獨的if語句,則每次都會評估每個if的條件。再次,在這種情況下,它可能(並不是什麼大問題)。但是,如果條件是,比如......

if(delete_file('foo.png')) { 
    .... 
} 

if(delete_file('bar.png')) { 
    .... 
} 

if(delete_file('baz.png')) { 
    .... 
} 
else { 
    .... 
} 

那麼,你應該能夠看到這是怎麼回事;)如果你使用elseif,它就會停止嘗試評估一旦得到真正的。而且,如果沒有其他的事情是真的,其他的只會被調用。

2
<?php 
    if (3 > 1) { 
     echo "This will be printed."; 
    } 
    if (3 > 2) { 
     echo "This will be printed too."; 
    } 
    if (3 > 3) { 
     echo "This will NOT be printed."; 
    } 
    else { 
     echo "This WILL be printed."; 
    } 
?> 

但ELSEIF:

<?php 
    if (3 > 1) { 
     echo "This will be printed."; 
    } 
    elseif (3 > 2) { /* This condition will not be evaluated */ 
     echo "This will NOT be printed"; 
       // because it's on the ELSE part of the previous IF 
    } 
    elseif (3 > 3) { /* This condition will not be evaluated either */ 
     echo "This will NOT be printed."; 
    } 
    else { /* This ELSE condition is still part of the first IF clause */ 
     echo "This will NOT be printed."; 
    } 
?> 

所以,你應該使用ELSEIF,否則$ toppic將始終是 'newspaper.png' 造成的,應該至極是正確的,或 'finalelse.png'這可能是對還是錯,因爲它會覆蓋以前的條件條款。

我希望你會覺得這有幫助。

1

答案很簡單:

if(a==1){ 
    b 
} 
elsif(b==1){ 
    c 
} 

等於

if(a==1){ 
    b 
} 
else{ 
    if(b==1){ 
    c 
    } 
} 

這是相同

if(a==1){ 
    b 
} 
if(b==1){ 
    c 
} 

如果不是可能的是,== 1並且b = = 1。雖然兩個if語句都可以爲true,但是當可以執行b和c時。這是不可能的,如果你在那裏使用elsif,因爲b == 1只會在!= 1時被檢查!

0

明智地使用elseif可以爲您節省一大堆時間,因爲解析器不需要評估所有條件。

2

這並不總是一個效率問題。如果您切換的東西,用else if,而不是它是必不可少只是if

比方說,我們正在切換的可變$computerOn

if ($computerOn == true) { 
    $computerOn = false; 
} 
if ($computerOn == false) { 
    $computerOn = true; 
} 

在上述情況下,您將$computerOn始終true。如果它是true,則它設置爲false。在此之後,我們檢查它是否爲false,它現在必須獨立於初始條件,因此現在設置爲true

在另一方面下面的代碼將切換$ computerOn:

if ($computerOn == true) { 
    $computerOn = false; 
} elseif ($computerOn == false) { 
    $computerOn = true; 
} 

現在我們只檢查是否$computerOnfalse如果不是最初true。因此我們有一個切換。

如果事情變得更加複雜,您可能必須使用多個elseif s。當邏輯決定elseif是必須的還是選擇的時候,認識到這一點很重要。

+1

喜歡這個例子。謝謝 – Amit 2010-08-05 07:09:56