Переключатель Switch

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;
?>

Также хочу отметить, что вместо двоеточия можно спокойно юзать точку с запятой (только поосторожнее с последним примером).

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 2

  • Игорь24 апреля 2013 в 13:04 #

    Пример с аналогом else не работает, постоянно выдает синтаксическая ошибка

    • Миша25 апреля 2013 в 12:04 #

      протестировал, похоже, что все ок, ну можно попробовать заменить endswitch на фигурные скобки

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...