elseif 与 else if 之间的潜在区别
Posted
技术标签:
【中文标题】elseif 与 else if 之间的潜在区别【英文标题】:underlying difference between elseif vs else if 【发布时间】:2011-06-07 09:14:59 【问题描述】:我想知道elseif
和else if
之间的区别。
我在阅读the manual,它说如果使用大括号,它们的处理方式相同,但只有
elseif
在不使用大括号时有效。
另外一位贡献者说:
注意 elseif() 比 else if() 快一些
他通过基准测试来支持它。
在我看来,elseif 才是真正的表达方式:
else if() ...
实际上相当于:
else if() ...
这或许可以解释为什么它稍微慢了一点。
我习惯于使用else if
,因为这也是我在其他语言中的做法。我真的不认为你以哪种方式输入它并不重要(除非你不使用大括号..但我认为无论如何使用大括号总是好的)我只是对底层细节感到好奇。
我说的对吗?
【问题讨论】:
查看此问题的答案:***.com/questions/3662412/… 不涉及性能,但可能建议 php 将else if
视为else if
。
这个问题肯定是我原来的问题。
Are "elseif" and "else if" completely synonymous?的可能重复
这里指的是运行速度,而另一个没有
【参考方案1】:
除了我的评论,从我在 PHP 源代码中可以看到,唯一的速度提升是 PHP 的解析器有一个特殊的标记 elseif
,不出所料地称为 T_ELSEIF
。但我确信速度提升只不过是在替代语法中允许 elseif
的副作用:
if (cond1):
// Do something
elseif (cond2):
// Do something else
else:
// Do something else
endif;
类似于 Python,它使用 elif
、else if
和空格是不允许的,除非不必要地使解析器的实现代码复杂化(即在看到冒号和 if
关键字之间采取不同的行为)。所以else
和if
后面分别需要一个冒号,这就是语言规则的规定。
我很确定 PHP 只是将 else if
视为单个语句 else
中的条件块。
如果有任何速度差异根本,请归咎于解析器。
【讨论】:
而且,如果我没记错的话,PHP 根本不应该关心空格。 @Charlie Pigarelli:空格不是问题,事实上 Python 和 PHP 的替代语法在看到if
而不是 else
之后的冒号时会窒息。【参考方案2】:
在Manual我读出了(见注):
注意:请注意,elseif 和 else if 只会被视为完全 与上例中使用大括号时相同。当使用一个 冒号来定义你的 if/elseif 条件,你不能分开 else if 变成两个单词,否则 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;
?>
【讨论】:
【参考方案3】:该评论中的“速度差异”在统计上并不显着。除了else if:
不解析,没有任何实际区别。
【讨论】:
【参考方案4】:关于效率,基于我长期研究的内容。没有区别。
【讨论】:
不妨分享你的结果来确认。 错了!确认你的“长期学习”,但不要撒谎。以上是关于elseif 与 else if 之间的潜在区别的主要内容,如果未能解决你的问题,请参考以下文章