我正在修改一个wordpress模板,我很好奇,这是
PHP中有效的控制结构.任何人都有洞察力
@H_301_1@<?PHP if(condition): ?>
<?PHP if(!condition || !function()) ?>
<?PHP elseif(condition): ?>
<?PHP if(!condition || !function()) ?>
<?PHP endif; ?>
@H_301_1@<?PHP
if(condition):
if(!condition || !function())
elseif(condition):
if(!condition || !function())
endif;
?>
这是无效的,因为缩进的if语句不会结束.那么如何/为什么这个代码是有效的,如果有开放和关闭PHP标签无处不在?
@H_301_1@<?PHP if(true): ?> <?PHP if(true) ?> <?PHP endif; ?> <?PHP echo 'here'; ?>
您的(简化)示例代码相当于:
@H_301_1@<?PHP
if(condition):
if(!condition || !function()) { }
endif;
?>
甚至:
@H_301_1@<?PHP if(condition): if(!condition || !function()); endif; ?>关闭<?PHP标签,你似乎得到一个空的声明是免费的. 你的真实例子可能像这样一个人:
@H_301_1@<?PHP if(true): if(true); endif; echo 'here'; ?>但请注意,一个elseif使这个模糊!
@H_301_1@<?PHP if(condition): if(!condition || !function()); elseif(condition): // Bogus! which block does this belong to? if(!condition || !function()); endif; ?>我们必须消除歧义:
@H_301_1@<?PHP if(condition): { if(!condition || !function()); } elseif(condition): { if(!condition || !function()); } endif; ?>现在很清楚,但是现在我们可以完全免除了冒号语法.
感谢Lekensteyn指出这一点!
请参阅下面的讨论进一步的怪异.