elseif 与 else if 之间的潜在区别

Posted

技术标签:

【中文标题】elseif 与 else if 之间的潜在区别【英文标题】:underlying difference between elseif vs else if 【发布时间】:2011-06-07 09:14:59 【问题描述】:

我想知道elseifelse if 之间的区别。

我在阅读the manual,它说如果使用大括号,它们的处理方式相同,但只有elseif 在不使用大括号时有效。

另外一位贡献者说:

注意 elseif() 比 else if() 快一些

他通过基准测试来支持它。

在我看来,elseif 才是真正的表达方式:

else if() ...

实际上相当于:

else  if() ... 

这或许可以解释为什么它稍微慢了一点。

我习惯于使用else if,因为这也是我在其他语言中的做法。我真的不认为你以哪种方式输入它并不重要(除非你不使用大括号..但我认为无论如何使用大括号总是好的)我只是对底层细节感到好奇。

我说的对吗?

【问题讨论】:

查看此问题的答案:***.com/questions/3662412/… 不涉及性能,但可能建议 phpelse 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,它使用 elifelse if 和空格是不允许的,除非不必要地使解析器的实现代码复杂化(即在看到冒号和 if 关键字之间采取不同的行为)。所以elseif后面分别需要一个冒号,这就是语言规则的规定。

我很确定 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 之间的潜在区别的主要内容,如果未能解决你的问题,请参考以下文章

PHP中elseif与else if的区别

java,if else和if else if else区别?

if else elseif使用注意点

while和if的区别

关于if与switch的使用与区别

喵呜,来啦来啦:你真的了解if,if else吗