2011-03-31 76 views
2

我有一個奇怪的語法問題有關嵌套if語句。PHP嵌套,如果語法錯誤

此代碼錯誤:

if(true): 
    if(true){ 
     var_dump(true); 
    } 
else: 
    var_dump(false); 
endif; 

此代碼不會出錯(注意添加;):

if(true): 
    if(true){ 
     var_dump(true); 
    }; 
else: 
    var_dump(false); 
endif; 

是怎麼回事?

+4

';'預計在endif之後。也請@anybody不要使用if():endif;語法:P – n00b 2011-03-31 21:46:57

+1

可能只是我的看法,但我總是將該語法看作是一個可怕的perl神器。 (+1 n00b)。我想補充一點,while循環也是糟糕的(該死的在WordPress中很受歡迎)。 – Christian 2011-03-31 21:47:02

+3

@ n00b和@Christian Sciberras它適用於我相信的PHP模板,而不適用於方法等。當您將PHP邏輯與HTML混合在一起時,這很有用,因爲它比浮動花括號更容易閱讀,因爲它可能會關閉如果或一段時間或爲等http://php.net/manual/en/control-structures.alternative-syntax.php – Treffynnon 2011-03-31 21:52:02

回答

5

這是因爲else被分配給內部如果沒有;

0

我知道這是一個老問題,但我發現了一個有效的答案。我改變了OP的代碼:

if(true): 
    if(true){ 
     var_dump(true); 
    } 
else: 
    var_dump(false); 
endif; 

以下幾點:

if (true) : 
    { 
     if (true) { 
      var_dump (true); 
     } else { 
      var_dump (false); 
     } 
    } 
endif; 

其成功運行,並且打印true

我做的唯一改變是我把嵌套的if包裝在一個塊中。

簡化代碼:

if (true) : 
    { 
     if (true) 
      var_dump (true); 
     else 
      var_dump (false); 
    } 
endif; 

請注意,我使用PHP 7.0.0