В чем разница между Switch и IF?

Я знаю, что это может быть простой вопрос, но хочу знать каждое мнение по этому поводу.

в чем разница между функцией switch и IF в PHP? То, что я вижу, – это когда бывшая функция «switch» использует функцию «IF», ​​там тоже применяется. Исправьте меня, если я ошибаюсь.

Или любая разница в производительности между двумя?

Solutions Collecting From Web of "В чем разница между Switch и IF?"

Или любая разница в производительности между двумя?

Забудьте о разнице в производительности на этом уровне – микроскопический, но вы почувствуете это только при выполнении сотен тысяч операций, если вообще. switch – это конструкция для лучшей удобочитаемости кода и ремонтопригодности:

 switch ($value) { case 1: .... break; case 2: .... break; case 3: .... break; case 4: .... break; case 5: .... break; default: .... break; } 

в основном гораздо более чистым и читаемым, чем

 if ($value == 1) { .... } elseif ($value == 2) { .... } elseif ($value == 3) { .... } elseif ($value == 4) { .... } elseif ($value == 5) { .... } else { .... } 

Редактировать: Вдохновленный комментарием Кучен, для полноты некоторых тестов (результаты будут разными, это живой). Имейте в виду, что это тесты, которые выполняются в 1000 раз . Разница для пары if 's полностью пренебрежимо мала .

  • if и elseif (используя ==) 174 мкс
  • if, elseif и else (используя ==) 223 мкс
  • if, elseif и else (используя ===) 130 мкс
  • переключатель / случай 183 мкс
  • switch / case / default 215 мкс

Заключение (от phpbench.com) :

Использование переключателя / case или if / elseif почти то же самое. Обратите внимание, что тест не соответствует === (в точности равен) и немного быстрее, чем при использовании == (равно).

Если у вас есть простые условия, например, если что-то приравнивается к чему-то другому, тогда переключатель идеален.

Например, вместо того, чтобы делать следующее:

 if($bla == 1) { } elseif($bla == 2) { } elseif($bla == 3) { } etc... 

Лучше сделать это так:

 switch($bla) { case 1: ... break; case 2: ... break; case 3: ... break; default: ... break; } 

Кроме того, если у вас сложные условия, вы должны использовать if / else.

Я думаю, что все это вопрос мнения – некоторые люди просто не используют инструкции switch вообще и придерживаются if / else.

Нет, ты прав.
Между этими утверждениями нет большой разницы.
Вы можете использовать тот, который вам нравится.

Просто имейте в виду, что если вам нужно использовать более 3-4 последовательных условий, это означает, что у вас, скорее всего, есть проектные ошибки.

Обычно вы можете заменить такой оператор циклом или более четким дизайном приложения.

Однако не забывайте, что коммутатор не обязательно работает как простой оператор if. Помня о том, что коммутатор не требует перерыва в конце каждого случая, и, оставляя этот разрыв, вы можете «провалиться» в следующий случай, также может позволить некоторые интересные и несколько сложные «ifs».