Php if:endif中的if{}
为什么它不起作用?出现分析错误:语法错误,意外“:”。。。在线7Php if:endif中的if{},php,Php,为什么它不起作用?出现分析错误:语法错误,意外“:”。。。在线7 $a = 0; $b = 1; $c = 3; $d = 4; if ($a == $b): if ($b == $c) { // something } else: $c = $a; endif; 但如果我将其更改为(仅添加了else语句): 它很好用 为什么呢?这不是一个PHP错误吗?或者有一条规则是关于…或者我应该知道 无论如何,我使用的是PHP5.3.3版本。我不确定我是否会称这是一个bu
$a = 0; $b = 1; $c = 3; $d = 4;
if ($a == $b):
if ($b == $c) {
// something
}
else:
$c = $a;
endif;
但如果我将其更改为(仅添加了else语句):
它很好用
为什么呢?这不是一个PHP错误吗?或者有一条规则是关于…或者我应该知道
无论如何,我使用的是PHP5.3.3版本。我不确定我是否会称这是一个bug,但我相信您出现这个问题是因为,结合您混合的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
另一方面,除非你想让你的程序员同事在你睡觉的时候把你打死,否则请不要使用这种语法。正如在文章的评论中提到的,解析器似乎并不总是认为一种样式的
if
不应该与另一种样式的else
匹配。if/else的冒号形式可能是不明确的在处理嵌套的ifs时。在您的示例中,else被附加到第二个if(正如它应该的那样)。为了避免这种情况,您必须通过向第二个if添加else(如您在第二个代码块中所示)或使用{}显式定义控制流,显式地让解释器知道该else与第一个if配对
换句话说,您可以使用多种形式的if语句。例如:
if (foo):
//statements
else {
//statements
}
这是完全正确的。尽管我建议不要混合表单,因为它会影响可读性。根据PSD标准,始终使用括号
$a = 0;
$b = 1;
$c = 3;
$d = 4;
if ($a == $b) {
if ($b == $c) {
// something
} else {
$c = $a;
}
}
它更具可读性、更安全、更清晰。很有趣,这很好地说明了为什么不应该将模板样式的流控制语句与常规的大括号语句混合使用。(或者使用模板样式,除非您正在编写一个HTML视图……但这是我的观点)嗯,这很有趣。看起来替代else正在连接到内部if。我想知道您是否可以将内部if括在括号内或其他什么地方。@NullUserException悬挂else在这里似乎不是这样。尽管op混合了语法,每个if-else都被正确分组,但它永远不会是[if(if-else)]或[(if-else)else],它必须是[if(if-else)]@itachi这个问题可能不是自愿的,不过,你不应该急于批评……关于我要写的东西。只有更好。:)谢谢你的建议。我不会混淆语法。这只是一个小小的奇迹,它变成了一个问题。在通过一个自动格式化工具运行他们的代码块之后,你似乎对这个问题进行了几十次编辑。请停止这样做,没有客观上“正确”的方式来格式化PHP,人们可以随意使用任何他们喜欢的格式发布。
$a = 0;
$b = 1;
$c = 3;
$d = 4;
if ($a == $b) {
if ($b == $c) {
// something
} else {
$c = $a;
}
}