elseif 与 else 之间的潜在区别,如果

php
2022-08-30 21:17:50

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

我正在阅读手册,其中说如果使用牙套,它们会受到相同的对待,但只有在不使用牙套时才有效。{}elseif

另一位贡献者也说:

请注意,} elseif() { 比 } else if() {

他用基准测试来支持它。

在我看来,elseif是说出来和说的真正方式:

else if() {...}

实际上相当于:

else { if() {...} }

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

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

我说的对吗?


答案 1

除了我的评论之外,从我在PHP源代码中看到的内容来看,唯一的速度提升是PHP的解析器具有一个特殊的令牌,不出所料地称为。但我敢肯定,速度提升只不过是允许使用替代语法的副作用:elseifT_ELSEIFelseif

if (cond1):
    // Do something
elseif (cond2):
    // Do something else
else:
    // Do something else
endif;

与 Python 类似,它使用 ,如果不必要地使解析器的实现代码复杂化(即在看到冒号和关键字之间以不同的方式操作),则不允许使用空格。因此,在和分别之后直接需要冒号,这就是语言规则的规定。elifelse ififelseif

因此,我很确定PHP只是在单数语句中被视为条件块。else ifelse

如果有任何速度差异,请将其中的大部分归咎于解析器。


答案 2

手册中,我读出(见注):

注意:请注意,elseif 和 else if 只有在使用大括号时才会被视为完全相同,如上例所示。当使用冒号来定义 if/elseif 条件时,如果将 else 分隔成两个单词,则不得将 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;

?>

推荐