2013-05-09 30 views
3

知道,在PHP中,我們可以在「如果」後忽略條件塊大括號只用一個函數/線,「否則,如果」或「其他」標籤,就像這樣:否則如果塊大括號

if (myVal == "1") 
    doThis(); 
else if (myVal == "2") 
    doThat(); 
else 
    doNothing(); 

我問自己,如果是這樣的:

if (myVal == "1") 
    doThis(); 
else 
    if (myVal2 == true) 
    doThat(); 
    else 
    doNothing(); 

是由PHP看作是可以在本:

if (myVal == "1") 
{ doThis(); } 
else 
{ 
    if (myVal2 == true) 
    { doThat(); } 
    else 
    { doNothing(); } 
} 

或這樣的:

if (myVal == "1") 
    { doThis(); } 
else if(myVal2 == true) 
    { doThat(); } 
else 
    { doNothing(); } 

短版:就是「換行」其他人足以將其從一個「if」語句分開後還是會被視爲一個「否則,如果」


編輯我自己的問題得到一個關於我的猜測確認:

if(false) 
    echo "1"; 
else 
    if (false) 
    echo "2"; 
else 
    echo "3"; 

顯示的是「3」,而被拋出一個錯誤以下因爲有兩個else語句被發現:

if(false) 
    echo "1"; 
else 
    if (false) 
    echo "2"; 
    else 
    echo "4"; 
else 
    echo "3"; 

因此,斷線似乎沒有任何區別,唯一重要的是「if」和「else」計數。

+6

明顯的問題:你試過了嗎?爲自己測試它應該相當容易。不過,我覺得我應該表明,不管PHP *是否允許您放棄括號,良好的編程習慣將始終包含它們,即使它們是可選的。根本沒有理由放棄它們,以及爲什麼這是一個糟糕的主意有很多原因。 – Spudley 2013-05-09 14:15:19

+0

也別忘了PHP有一個'elseif()'。如果你使用它,它會消除這個問題中的任何疑問。 – Spudley 2013-05-09 14:16:49

+0

@Spudley事實上,方括號應該始終存在。我會盡力找到一種可以快速測試的情況,如果以前沒有人收到結果,就會發布結果。謝謝 – RelevantUsername 2013-05-09 14:19:16

回答

4

沒有大括號PHP只會將下一行作爲要執行的代碼塊。

if (myVal == "1") 
    doThis(); 
else 
    if (myVal2 == true) 
    doThat(); 
    else 
    doNothing(); 

myVal如果是"1"doThis();是下一行並且被這樣拾取作爲代碼塊來執行。如果有更多的代碼有:

if (myVal == "1") 
    doThis(); 
    doThisToo(); 

它仍然是隻執行doThis()作爲if語句的一部分,而doThisToo()總是執行。

如果myVal != "1"它選取else條件中的第一個塊並僅執行該條件。 在這種情況下,它是另一種if語句需要進行評估:

if (myVal2 == true) 

該邏輯繼續:確定下一個代碼塊由任一服用下一行或由捲曲的包裹識別的下一個塊執行括號。

+0

那麼如果PHP僅僅在第一個else條件中選擇第一個塊,假設'myVal!=「1」'和'myval2 == false',那麼'doNothing()'函數會完成嗎?謝謝 – RelevantUsername 2013-05-09 14:27:23

+0

評估(myVal == 1)爲false,跳轉到其他條件。第一行是下一個塊。將(myVal2 == 2)評估爲false,跳到下一個else,將第一個塊標識爲下一行,執行doNothing() – davbryn 2013-05-09 14:30:54

0

我認爲你的兩個例子結果都是完全一樣的

else始終屬於前面的if,除非大括號指定否則。

if(包括可選else及其後續語句作爲單語句或大括號包裹塊)始終被視爲一個事務所語句本身,所以

{ 
    if(...) {} else {} 
} 

實際上相同

if(...) {} else {}