如果语法错误,PHP嵌套

时间:2011-03-31 21:44:34

标签: php

我有一个与嵌套if语句相关的奇怪语法问题。

此代码错误:

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

此代码没有错误(请注意添加的;):

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

是什么给出了?

3 个答案:

答案 0 :(得分:5)

这是因为如果没有;

,则将else分配给内部

答案 1 :(得分:2)

Note:

Mixing syntaxes in the same control block is not supported.

这来自PHP手册中的注释:

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

答案 2 :(得分:0)

我知道这是一个老问题,但我找到了一个有效的答案。我改变了OP的代码:

class DependsOnEnvironment {

    private final EnvironmentHolder environmentHolder;

    @Inject
    DependsOnEnvironment(EnvironmentHolder environmentHolder) {
        this.environmentHolder = environmentHolder;
    }

    public void doSomethingWithMetrics() {
        Environment environment = environmentHolder.get();
        if (environment == null) {
            throw new IllegalStateException("Environment object should be available at the injection time of this class");
        }

        Metrics metrics = environment.metrics();
        //etc.
    }
}

以下内容:

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

请注意,我使用的是PHP if (true) : { if (true) var_dump ( true ); else var_dump ( false ); } endif;