为什么它不起作用?出现解析错误:语法错误,第7行意外':'...
$a = 0; $b = 1; $c = 3; $d = 4;
if ($a == $b):
if ($b == $c) {
// something
}
else:
$c = $a;
endif;
但如果我将其更改为(只是添加了其他声明):
$a = 0; $b = 1; $c = 3; $d = 4;
if ($a == $b):
if ($b == $c) {
// something
} else {
// something
}
else:
$c = $a;
endif;
工作正常。
为什么?这不是PHP的错误吗?或者有一个关于if ...的规则我应该知道吗?
无论如何,我使用的是PHP 5.3.3版本。
答案 0 :(得分:15)
我不确定我是否会称这是一个错误,但我认为你因为dangling else和你的混合if-else语法而遇到了这个问题:
if ($a == $b): // 1
if ($b == $c) { // 2
// something // 3
} // 4
else: // 5 - this else
$c = $a; // 6
endif; // 7
注意第5行的else
是如何模糊的:它可以“属于”第一个或第二个if
语句。
您可以通过在嵌套if
之后添加分号来轻松消除这种歧义并修复语法错误:
if ($a == $b): // 1
if ($b == $c) { // 2
// something // 3
}; // 4 - here
else: // 5
$c = $a; // 6
endif; // 7
另外请注意,请不要使用此语法,除非您希望其他程序员在睡眠中将您打死。
答案 1 :(得分:1)
正如PHP manual's control structure page的评论中所述,解析器似乎并不总是假设一个样式中的if
不能与使用另一个样式的else
匹配。
答案 2 :(得分:0)
在处理嵌套ifs时,if / else的冒号形式可能不明确。在你的例子中,else附加了第二个if(因为它应该。)为了避免这种情况,你必须明确地让解释器知道其他与第一个if配对,或者通过向第二个if添加else(正如您在第二个代码块中所示,或使用{}明确定义控制流。
换句话说,您可以使用多种形式的if语句。例如:
if (foo):
//statements
else {
//statements
}
完全有效。虽然我建议不要混合表格,因为它会影响可读性。
答案 3 :(得分:0)
按PSD标准,始终使用括号。
$a = 0;
$b = 1;
$c = 3;
$d = 4;
if ($a == $b) {
if ($b == $c) {
// something
} else {
$c = $a;
}
}
它更易读,更安全,更清晰。