“ elseif”和“ else if”是否完全同义?


170

elseifelse if完全同义词,还是有区别?

Zend在使用哪个标准上是否有公认的“标准”?

虽然我个人不喜欢elseif在代码中看到代码,但我只需要知道它们是否是同义词,并且PHP手册并不是最容易搜索的。


10
else if顺便说一下,并非其他所有语言都使用。例如,VB也使用,ElseIf而Ruby使用elsif
Daniel Vandersluis 2010年

6
和shell / bash使用elif
knittl

7
python还使用elif
gregghz 2011年

Answers:


218

PHP手册

在PHP中,您还可以编写“ else if”(用两个词表示),其行为与“ elseif”之一(用一个词表示)相同。语法含义略有不同(如果您熟悉C,这是相同的行为),但最重要的是,两者都将导致完全相同的行为。

从本质上讲,它们的行为相同,但是else if从技术上讲,它等效于嵌套结构,如下所示:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

该手册还指出:

请注意,如上例所示,使用大括号时,elseif和else if仅被视为完全相同。使用冒号定义if / elseif条件时,请勿将else分隔为两个单词,否则PHP会因解析错误而失败。

这意味着在正常控制结构形式中(即使用花括号):

if (first_condition)
{

}
elseif (second_condition)
{

}

任一elseifelse if都可以使用。但是,如果使用备用语法,则必须使用elseif

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;

18
示例片段的工作很好。如果有的话,必须使用备用语法来证明PHP只是将其else if视为else { if {
BoltClock

2
PHP不将其else if视为else { if {,否则您将无法做if (0) { } else if (0) { } else { }...
Guido Hendriks 2015年

4
@GuidoHendriks:不是一个被视为另一个,而是它们在功能上是等效的。您的示例等效于嵌套表单if (0) { } else { if (0) { } else { } }。请注意,在最后一个else块中没有歧义,对于完整分支,情况总是如此(每个if都有else)。
outis


随着替代synyax你只需要记住的内“冒号”和ENDIF如果:if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; 是的同等学历; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
DDS

47

由包括Zend开发人员在内的成员组成的框架互操作性小组(FIG)(https://github.com/php-fig/fig-standards#voting-members)组成了一系列标准建议(PSR) -#)。

Zend2和Symfony2已经遵循PSR-0。

样式没有严格的规定,但是您可以尝试并遵循尽可能多的PSR-2。

在PSR-2中对else if vs elseif进行了评论:

应该使用关键字elseif代替else if,以便所有控制关键字看起来像单个单词。

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#51-if-elseif-else

其中一些建议就是这些建议。是否使用else if或elseif由您决定


4
非常感谢您指出“将关键字作为一个单词”的指南。
西奥多·R·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.