Я задавался вопросом о различии между elseif
и else if
.
Я читал руководство, в котором говорится, что если использовать фигурные скобки {}
они обрабатываются одинаково, но только elseif
работает, если не использовать фигурные скобки.
Другой участник сказал:
Заметим, что} elseif () {несколько быстрее, чем} else if () {
и он поддержал его с контрольным тестом.
Мне кажется, что elseif – это истинный способ сказать это и сказать:
else if() {...}
на самом деле эквивалентно:
else { if() {...} }
что могло бы объяснить, почему его незначительно медленнее.
Я привык использовать else if
так, как я это делаю и на других языках. Я действительно не думаю, что это важно, как вы его вводите (если вы не используете фигурные скобки .. но я думаю, что всегда полезно использовать фигурные скобки в любом случае). Мне было просто интересно узнать о деталях.
Я прав?
В дополнение к моему комментарию, из того, что я могу видеть в источнике PHP, единственное ускорение скорости заключается в том, что в парсере PHP есть специальный токен для elseif
, который неудивительно известен как T_ELSEIF
. Но я уверен, что повышение скорости – не что иное, как побочный эффект, позволяющий elseif
в альтернативном синтаксисе:
if (cond1): // Do something elseif (cond2): // Do something else else: // Do something else endif;
Подобно Python, который использует elif
, else if
с пространством не было разрешено без необходимости излишне усложнять код реализации парсера (т.е. действовать по-разному между просмотром двоеточия и ключевым словом if
). Таким образом, двоеточие требуется непосредственно после else
и, if
, и это то, как указано языковое правило.
Ergo Я уверен, что PHP просто рассматривает else if
в качестве условного блока в сингулярном выражении else
.
Если есть какие-либо различия во времени , обвините парсер в большинстве из них.
В Руководстве я зачитал (см. Примечание):
Примечание. Обратите внимание, что 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; ?>
«Разница в скорости» в этом комментарии не является статистически значимой. Кроме else if:
не разобрать, нет никакой эффективной разницы.
Что касается эффективности и основано на том, что я изучал в течение длительного времени. Нет никакой разницы.