我有一个与嵌套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;
是什么给出了?
答案 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;
。