elseif vs else if之间的根本区别

时间:2011-01-11 19:00:45

标签: php

我想知道elseifelse if之间的差异。

我正在阅读the manual,其中说如果使用大括号{}它们被视为相同但只有elseif在不使用大括号时有效。

另一位撰稿人说:

  

请注意,如果(){

,} elseif(){会比}更快

他用基准测试对其进行了备份。

对我而言,似乎是另一种说法是真实的说法并说:

else if() {...}

实际上相当于:

else { if() {...} }

这可能解释了为什么它稍微慢了。

我习惯使用else if,因为这也是我在其他语言中的表现方式。我真的不认为你键入它的方式很重要(除非你没有使用大括号..但我认为使用大括号总是很好)我只是对底层细节感到好奇。

我说错了吗?

4 个答案:

答案 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}}关键字)。因此,分别在ifelse之后需要冒号,这就是规定语言规则的方式。

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)

关于效率,并基于我长期研究的内容。没有区别。