这个有效的PHP代码怎么样?

Mar*_*ahn 10 php

我正在修改一个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)

Ker*_* SB 3

您的(简化的)示例代码相当于:

<?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 指出了这一点!

有关更多奇怪之处,请参阅下面的讨论。