我正在修改一个wordpress模板,我很好奇这是如何在PHP中有效的控制结构.有人有任何见解吗?
<?php if(condition): ?>
<?php if(!condition || !function()) ?>
<?php elseif(condition): ?>
<?php if(!condition || !function()) ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
如果我删除所有标签,我得到(更理智的缩进):
<?php
if(condition):
if(!condition || !function())
elseif(condition):
if(!condition || !function())
endif;
?>
Run Code Online (Sandbox Code Playgroud)
这是无效的,因为缩进的if语句没有结束.那么如果到处都有开放和关闭的php标签,这个代码如何/为什么有效呢?
编辑Kerrek SB.制作一个php文件并运行它.这是有效的:
<?php if(true): ?>
<?php if(true) ?>
<?php endif; ?>
<?php echo 'here'; ?>
Run Code Online (Sandbox Code Playgroud)
您的(简化的)示例代码相当于:
<?php
if(condition):
if(!condition || !function()) { }
endif;
?>
Run Code Online (Sandbox Code Playgroud)
甚至:
<?php
if(condition):
if(!condition || !function());
endif;
?>
Run Code Online (Sandbox Code Playgroud)
通过关闭<?php标签,您似乎免费获得了“空声明”。
你的真实例子可能是这样的:
<?php if(true): if(true); endif; echo 'here'; ?>
Run Code Online (Sandbox Code Playgroud)
但请注意, anelseif使这变得不明确!
<?php
if(condition):
if(!condition || !function());
elseif(condition): // Bogus! which block does this belong to?
if(!condition || !function());
endif;
?>
Run Code Online (Sandbox Code Playgroud)
我们必须消除歧义:
<?php
if(condition):
{
if(!condition || !function());
}
elseif(condition):
{
if(!condition || !function());
}
endif;
?>
Run Code Online (Sandbox Code Playgroud)
现在很清楚了,但现在我们可以完全省去冒号语法。
感谢 Lekensteyn 指出了这一点!
有关更多奇怪之处,请参阅下面的讨论。