Урок 9. PHP — Switch

В предыдущих уроках мы рассмотрели различные элементы, которые позволяют организовать проверку условия в PHP. Тем не менее, бывают случаи, когда оператор IF…Else не самый эффективный способ для проверки определенных условий.

Например, мы могли бы иметь переменную, которая хранит определенное значение, и вы хотите, чтобы выполнялось какое-то действие в зависимости от значения этой переменной. В таком случае вы можете иметь 20 различных вариантов, которые вы должны обработать с безумно длинным блоком If / ElseIf / ElseIf / ElseIf / … и так далее. Да уж, выглядит неважно, давайте посмотрим, можем ли мы сделать что-то другое.

PHP оператор Switch: Быстрая проверка

С помощью оператора Switch вы можете проверить наличие всех этих условий одновременно, и самое замечательное в том, что на самом деле более эффективно в плане программирования. Истинно беспроигрышная ситуация!

То, как работает переключатель, знает каждый: он берет одну переменную в качестве входных данных, а затем проверяет ее на выполнение того или иного условия, которые вы зададите. Вместо того, чтобы проверять значения переменной по одному, прогоняя ее через множество условий, свитч позволяет проверить все за один раз.

PHP оператор Switch: Пример

Приведем простой пример использования свитча. В нашем случае в зависимости от пункта назначения, который хранится в переменной, мы будем давать рекомендации что лучше взять с собой в дорогу.

$destination = "Tokyo";
echo "Отправляемся в $destination<br />";
switch ($destination){
	case "Las Vegas":
		echo "Берем с собой $5000! Вегас детка!";
		break;
	case "Amsterdam":
		echo "Парочка газет, фольга...";
		break;	
	case "Egypt":
		echo "50 бутылок солнцезащитного крема.";
		break;	
	case "Tokyo":
		echo "Берем деньги на сувениры.";
		break;
	case "Caribbean Islands":
		echo "Захватите трусы для плавания!";
		break;	
}

Результат:
Отправляемся в Tokyo
Берем деньги на сувениры.

Значение переменной $destination было Токио, поэтому, когда PHP выполнял оператор свитч, то на $destination он сразу сделал поиск для случая со значением «Токио». Он нашел его и продолжил выполнять код, который был прописан в этом сегменте.

Вы могли заметить, что каждый случай содержит break. Этот break как раз и позволяет во всех остальных случаях ничего не выполнять. Если бы в приведенном выше примере не было брейка, то код бы выполнялся не только в случае значения Токио! Используйте эти знания и никогда не нагромождайте десятки условий там, где можно обойтись одним свитчем!

Форма Switch достаточно уникальна, поэтому потратьте некоторое время на ее рассмотрение, прежде чем двигаться дальше. Примечание: начинающие программисты пренебрегают этой конструкцией, что неправильно и затрудняет чтение кода, а так же негативно сказывается на производительности!

PHP оператор Switch: действие по умолчанию

Возможно, вы заметили отсутствие обработки для случая, когда ни одно из условий не подходит нашей переменной. Если такое случится и свитч не найдет ни одного условия, удовлетворяющего значению переменной, то будет выполнено действие по умолчанию.

Рекомендую всегда использовать такую возможность и добавлять действие по умолчанию, даже если вы уверены, что переменная не примет значения, которого нет в свитче. Ниже приведен вариант нашего примера, в котором добавлена обработка действия по умолчанию.

$destination = "New York";
echo "Отправляемся в $destination<br />";
switch ($destination){
	case "Las Vegas":
		echo "Берем с собой $5000! Вегас детка!";
		break;
	case "Amsterdam":
		echo "Парочка газет, фольга...";
		break;	
	case "Egypt":
		echo "50 бутылок солнцезащитного крема.";
		break;	
	case "Tokyo":
		echo "Берем деньги на сувениры.";
		break;
	case "Caribbean Islands":
		echo "Захватите трусы для плавания!";
		break;	
	default:
		echo "Бельишко чистое не забудьте!";
		break;
}

Результат:
Отправляемся в New York
Бельишко чистое не забудьте!

Готово! Теперь вы умеете обращаться с PHP конструкцией Switch и знаете в каких случаях ее лучше использовать.

Условный оператор | Содержание | Функции

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

  1. Филя — 29.06.2012 15:04

    Я при правке кода действую по такому принципу: если при каком-то значении переменной нужно выполнить всего лишь один echo, то лучше использовать if/elseif — код в таком случае остаётся легко читаемым. Если необходимо выполнять большие участки кода в зависимости от определённого значения переменной, то действительно для более удобного чтения лучше применять switch.

    Хотя по большому счёту здесь стоит учитывать ещё и другие критерии. Например, если одно значение переменной запрашивается тысячу раз, а другие всего лишь по одному, просто нецелесообразно использовать switch. Лучше будет в таком случае задать популярное значение в if, а все остальные через elseif…

    Я в своё время очень долго метался из угла в угол, пытаясь понять «может лучше использовать if, а какие плюсы от использования switch?». В русскоязычном интернете на эту тему очень мало информации и примеров, поэтому, если поправите статью или напишите новую по этому поводу, она наверняка будет пользоваться популярностью :)

  2. myblaze — 29.06.2012 17:34

    Спасибо за замечания и дополнения! :) Хорошо, я подумаю на этот счет, хотя Вы уже практически все написали)

  3. Филя — 07.07.2012 07:07

    Как же всё? ) Я даже не упоминал о чём-то кроме читаемости кода, а ведь то, что if/elseif работает быстрее switch, немаловажно :)

    Вспоминая себя, я могу с уверенностью сказать, что многие новички (к профессионалам, кстати, себя я не отношу ни в коем разе, просто я чуть более продвинут, так как есть немного опыта) наверняка не поймут, что под выражением «нецелесообразно использовать» я скрыл именно производительность.

    Такой совет дал лишь потому, что у себя в блоге я не пишу о программировании, а тема довольно-таки интересная и, по-моему, не очень сложная, чтобы наглядно показать, какой скрипт и сколько по времени обрабатывается… Но в общем, решать Вам :)

  4. Филя — 07.07.2012 07:11

    Кстати, всё время забываю спросить, так как с wordpress практически не работал. Скажите, циферка 61093 в конце адреса — это порядковый номер комментария? Столько всего комментариев в блоге или же подсчёт ведётся с учётом тех, что отсеиваются как спам? )

  5. myblaze — 07.07.2012 10:02

    Верно, номер комментария, с учетом отсеянных как спам :)

  6. Миша — 05.03.2013 00:17

    кстати сказать про elseif, который из if…else фактически делает switch)

  7. max — 14.06.2013 19:38

    Берем с собой $5000! — ай ай ай. С $ проблем не будет?

  8. Андрей — 06.11.2013 16:00

    //Берем с собой $5000! — ай ай ай. С $ проблем не будет?
    При двойных кавычках значение после ($5000) вообще не выводит, а при одинарных выводит со знаком $

  9. Farhad — 31.01.2014 08:31

    проблем никаких, протестил,работает :-)

  10. Евгений — 08.05.2014 15:53

    Веселое изучение PHP. Хорошо оформлено и структурировано. Также даны ответы на большинство вопросов, которые могут возникнуть в головах новичков. Большое «спасибо» автору! ;)

  11. Влал — 09.04.2016 07:50

    Читаю Робина Никсона. Боже, сколько хлама в уроках, примеры такие что нихрена непонятно и неработает, особенно по switch.
    Спасибо автору блога за нормальное обьяснение))

  12. Школьник — 28.08.2017 22:42

    Все обиснино панятно и даступно, теперь я самый кутой праграмист в школе. Спасиба за такие патробные уроки.

  13. Школьник — 28.08.2017 22:45

    Thank you for the lessons. Everything is accessible and understandable, now I know the PHP language better.

Добавить комментарий