解析器无法尽可能合理地处理混合使用替代 if 语法。
以下是非法的(应该是这样的)
<?
if($a)
echo $a;
else {
echo $c;
}
?>
这也是非法的(应该是这样的)
<?
if($a) {
echo $a;
}
else
echo $c;
endif;
?>
但是由于两种替代 if 语法不可互换,因此可以合理地预期解析器不会尝试使用一种风格的 else 语句匹配使用另一种风格的 if 语句。换句话说,可以预期这将起作用
<?
if($a)
echo $a;
if($b) {
echo $b;
}
else
echo $c;
endif;
?>
而不是得出结论,认为 else 语句是打算匹配 if($b) 语句(并出错),解析器可以将 else 语句匹配到与之共享语法的 if($a) 语句。
虽然可以理解 PHP 开发人员不认为这是一个错误,或者不认为这是一个值得他们花时间的错误,但 jsimlo 指出混合使用替代 if 语法可能会导致意想不到的结果,这是正确的。