elseif vs else if之间的根本区别

JD *_*cks 17 php

我想知道的differnce elseifelse if.

我正在阅读手册,上面写着如果使用牙箍,{}它们的处理方式相同,但只有elseif在不使用牙箍时才有效.

另一位撰稿人说:

请注意,} elseif(){有点快于} else if(){

并且他通过基准测试进行了备份.

对我来说,似乎是另一种说法是真实的说法和说法:

else if() {...}
Run Code Online (Sandbox Code Playgroud)

实际上相当于:

else { if() {...} }
Run Code Online (Sandbox Code Playgroud)

这可能解释了为什么它稍微慢一点.

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

我对么?

Bol*_*ock 7

除了我的评论,从我可以在PHP源看,唯一的提升速度是PHP解析器有一个特殊的记号elseif,不出所料称T_ELSEIF.但我确信速度提升只不过是允许elseif使用替代语法的副作用:

if (cond1):
    // Do something
elseif (cond2):
    // Do something else
else:
    // Do something else
endif;
Run Code Online (Sandbox Code Playgroud)

类似于Python,它使用elif,else if不允许使用空格而不必不必要地使解析器的实现代码复杂化(即在查看冒号和if关键字之间采取不同的行为).因此else,if分别在之后和之后需要冒号,这就是语言规则的规定方式.

我非常确定PHP只是else if在单数语句中将条件块视为条件块else.

如果有任何速度的差异可言,归咎于他们大多解析器.


小智 6

手册中我读出(见注):

注意:请注意elseif和else在使用大括号时只会被视为完全相同,如上例所示.使用冒号来定义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;

?>
Run Code Online (Sandbox Code Playgroud)