Являются ли «elseif» и «else if» полностью синонимами?

170

Есть elseifи else ifполностью синонимами, или есть разница?

Есть ли у Zend принятый «стандарт», по которому можно использовать?

Хотя мне лично не нравится видеть elseifв коде, мне просто нужно знать, являются ли они синонимами, и руководство по PHP не самое простое для поиска.

Теодор Р. Смит
источник
10
else ifКстати, не каждый другой язык использует . Например, VB также использует ElseIfи Ruby использует elsif.
Даниэль Вандерслёйс
6
и shell / bash использует elif
knittl
7
Python также использует elif
gregghz

Ответы:

218

Из руководства по PHP :

В PHP вы также можете написать «else if» (в двух словах), и поведение будет идентичным «elseif» (в одном слове). Синтаксическое значение немного отличается (если вы знакомы с C, это то же самое поведение), но суть в том, что оба приведут к точно такому поведению.

По сути, они будут вести себя одинаково, но else ifтехнически эквивалентны вложенной структуре:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

В руководстве также отмечаются:

Обратите внимание, что elseif и else if будут считаться точно такими же, когда используются фигурные скобки, как в приведенном выше примере. При использовании двоеточия для определения условий if / elseif вы не должны разделять else if на два слова, иначе PHP потерпит неудачу с ошибкой разбора.

Это означает, что в обычной форме структуры управления (т.е. с использованием фигурных скобок):

if (first_condition)
{

}
elseif (second_condition)
{

}

либо , elseifили else 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 { }...
Гвидо Хендрикс
4
@GuidoHendriks: дело не в том, что одно рассматривается как другое, а в том, что они функционально эквивалентны. Ваш пример эквивалентен вложенной форме if (0) { } else { if (0) { } else { } }. Обратите внимание, что в последнем elseблоке нет двусмысленности , которая всегда имеет место для полных ветвей (у каждого ifесть else).
августа
Вот еще один пример для ссылки php.net/manual/en/control-structures.elseif.php#115851
WhyAyala
С альтернативным 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

Framework Interoperability Group (FIG), которая состоит из членов, которые включают разработчиков Zend ( https://github.com/php-fig/fig-standards#voting-members ), составила ряд Стандартных рекомендаций (PSR). - #).

Zend2 и Symfony2 уже следуют PSR-0.

Не существует жестких и быстрых правил для стилей, но вы можете попробовать и следовать как можно большему количеству PSR-2.

Существует комментарий на else, если vs elseif в PSR-2:

Ключевое слово elseif ДОЛЖНО использоваться вместо else, если все контрольные ключевые слова выглядят как отдельные слова.

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

Некоторые из рекомендаций - это просто рекомендации. Вам решать, использовать ли else, если или elseif

Джеймс Коуэн
источник
4
Большое спасибо за указание на ключевые слова как одно слово.
Теодор Р. Смит