我想知道elseif
和else if
之间的差异。
我正在阅读the manual,其中说如果使用大括号{}
它们被视为相同但只有elseif
在不使用大括号时有效。
另一位撰稿人说:
请注意,如果(){
,} elseif(){会比}更快
他用基准测试对其进行了备份。
对我而言,似乎是另一种说法是真实的说法并说:
else if() {...}
实际上相当于:
else { if() {...} }
这可能解释了为什么它稍微慢了。
我习惯使用else if
,因为这也是我在其他语言中的表现方式。我真的不认为你键入它的方式很重要(除非你没有使用大括号..但我认为使用大括号总是很好)我只是对底层细节感到好奇。
我说错了吗?
答案 0 :(得分:7)
除了我的评论之外,从我在PHP源代码中可以看到,唯一的速度提升是PHP的解析器具有elseif
的特殊标记,不出所料地称为T_ELSEIF
。但我确信速度提升只不过是在替代语法中允许elseif
的副作用:
if (cond1):
// Do something
elseif (cond2):
// Do something else
else:
// Do something else
endif;
与使用elif
的Python类似,不允许else if
带空格而不必不必要地使解析器的实现代码复杂化(即在查看冒号和{{之间的行为方式不同) 1}}关键字)。因此,分别在if
和else
之后需要冒号,这就是规定语言规则的方式。
Ergo我非常确定PHP只会将if
视为单数语句else if
中的条件块。
如果存在任何速度差异,请将解析器归咎于大多数
。答案 1 :(得分:5)
在Manual中,我宣读了(见注):
注意:请注意elseif和else if仅被视为完全相同 使用大括号时也是如上例所示。使用时 冒号来定义你的if / elseif条件,你不能将else分开 如果分成两个单词,或者PHP将因解析错误而失败。
示例:
<?php
/* Incorrect Method: */
if($a > $b):
echo $a." is greater than ".$b;
else if($a == $b): // Will not compile.
echo "The above line causes a parse error.";
endif;
/* Correct Method: */
if($a > $b):
echo $a." is greater than ".$b;
elseif($a == $b): // Note the combination of the words.
echo $a." equals ".$b;
else:
echo $a." is neither greater than or equal to ".$b;
endif;
?>
答案 2 :(得分:1)
该评论中的“速度差异”在统计上并不显着。除了else if:
没有解析之外,没有任何有效的区别。
答案 3 :(得分:0)
关于效率,并基于我长期研究的内容。没有区别。