PHP嵌套,如果语法错误

问题描述:

我有一个奇怪的语法问题有关嵌套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

Note: 

Mixing syntaxes in the same control block is not supported. 

这是从PHP手册中的注意事项:

http://php.net/manual/en/control-structures.alternative-syntax.php

这是因为else被分配给内部如果没有;

我知道这是一个老问题,但我发现了一个有效的答案。我改变了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