switch полезен в качестве замены нескольким if в том случае, если используется одна и та же переменная. Для того, чтобы было понятнее, покажу на примере. Предположим, у нас есть вот такой код:
<?php if ($my_number == 0) { echo '$my_number равно нулю'; } elseif ($my_number == 1) { echo '$my_number равно одному'; } elseif ($my_number == 2) { echo '$my_number равно двум'; } ?>
А вот как он будет выглядеть с использованием switch:
<?php switch ($my_number) { case 0: echo '$my_number равно нулю'; break; case 1: echo '$my_number равно одному'; break; case 2: echo '$my_number равно двум'; break; } ?>
В случае нахождения совпадения, функция не будет продолжать сравнивать значения — для этого и нужен break в конце.
Точно такой же пример, но теперь вместо числовых значений возьмём строковые:
<?php switch ($my_car) { case 'Ford Mustang': echo 'Моя тачка - Ford Mustang'; break; case 'Chevrolet Camaro': echo 'Я катаюсь на Camaro'; break; case 'Lamborghini Gallardo': echo 'У меня в гараже новенький Gallardo'; break; } ?>
Можно объединить несколько значений переменных следующим образом:
<?php switch ($my_cms) { case 'Wordpress': echo 'При создании сайтов я использую WordPress'; break; case 'Joomla': // аналог if($a==1 || $a==2) case 'Drupal': echo 'Я предпочитаю другие, менее популярные CMS'; break; } ?>
В следующем примере используем альтернативный синтаксис, а также добавим действие по умолчанию, которое будет выполняться в том случае, если ни одно из значений не совпадет (аналог else).
<?php switch ($my_cms) : case 'Wordpress': echo 'При создании сайтов я использую WordPress'; break; case 'Joomla': case 'Drupal': echo 'Я предпочитаю другие, менее популярные CMS'; break; default: echo 'Я делаю сайты на самописных движках'; endswitch; ?>
Также хочу отметить, что вместо двоеточия можно спокойно юзать точку с запятой (только поосторожнее с последним примером).
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Пример с аналогом else не работает, постоянно выдает синтаксическая ошибка
протестировал, похоже, что все ок, ну можно попробовать заменить endswitch на фигурные скобки