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 достаточно уникальна, поэтому потратьте некоторое время на ее рассмотрение, прежде чем двигаться дальше. Примечание: начинающие программисты пренебрегают этой конструкцией, что неправильно и затрудняет чтение кода, а так же негативно сказывается на производительности!

myblaze.ru

Конструкция switch() очень похожа на полную запись if, в которой есть 1 или несколько elseif. Основная задача данной конструкции – проверка разных совпадений. Конструкцию switch(), как правило, применяют в случаях, когда переменная может иметь различные значения и необходимо выполнить определенные действия в зависимости от данных значений. Ниже представлен синтаксис записи конструкции  switch():

switch(выражение){  case(условие):  //блок выражений  …  default:  //блок выражений  }

Результат выражения сравнивается с условиями в круглых скобках после case. Блок выражений выполняется, если результат соответствует условию, в ином случае – проверяется следующее условие. Если условия закончились и ни одно из них не подошло, выполняется часть кода default. В команде switch() у блока default такое же назначение, как и в else в условной конструкции if . Обе конструкции очень похожи. Пример:


<?php  switch($b){  case(4):  echo ‘$b=4’;  break;  case(5):  echo ‘$b=5’;  break;  default:  echo ‘$b!=4’;  }  ?>

Аналогичный код:

<?php  if($b==4){  echo ‘$b=4’;  }  elseif($b==5){  echo ‘$b=5’;  }  else{  echo ‘$b!=4’;  }  ?>

Для предотвращения дальнейшей проверки условий и выхода из switch() применяют команду break.

Используя конструкцию switch() можно сделать небольшой сайт в одном РНР – файле, пример находится ниже:

<?php  //Сперва проверяем, отправлялась ли форма  if(isset($_GET[“straniza”])){  $straniza=addslashes($_GET[“straniza”]);  }  else{  $straniza=“”;  }  switch($straniza){  //Если пользователь сайта выбрал раздел «Услуги»  case(“services”):  echo“<h1>Услуги</h1>”.  “<form action=‘index.php’ method=‘GET’>”.  “<select name=‘straniza’>”.  “<option value=‘about’>О компании</option>”.  “<option value=‘services’>Услуги</option>”.  “<option value=‘’>Главная</option>”.  “</select><input type=submit value=‘GO!’></form>”;  break;  //Если пользователь сайта выбрал раздел «О компании»  case(“about”):  echo“<h1>О компании</h1>”.  “<form action=‘index.php’ method=‘GET’>”.  “<select name=‘straniza’>”.  “<option value=‘about’>О компании</option>”.    
<option value=‘services’>Услуги</option>”. “<option value=‘’>Главная</option>”. “</select><input type=submit value=‘GO!’></form>”; break; //По умолчании выводим главную страницу default: echo“<h1>Главная страница</h1>”. “<form action=‘index.php’ method=‘GET’>”. “<select name=‘straniza’>”. “<option value=‘about’>О компании</option>”. “<option value=‘services’>Услуги</option>”. “<option value=‘’>Главная</option>”. “</select><input type=submit value=‘GO!’></form>”; } ?>

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

phpbuilder.ru

(PHP 4, PHP 5, PHP 7)

Оператор switch подобен серии операторов IF с одинаковым условием. Во многих случаях вам может понадобиться сравнивать одну и ту же переменную (или выражение) с множеством различных значений, и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная (или выражение). Это именно тот случай, для которого удобен оператор switch.

Замечание: Обратите внимание, что в отличие от некоторых других языков, оператор continue применяется в конструкциях switch и действует подобно оператору break. Если у вас конструкция switch находится внутри цикла, и вам необходимо перейти к следующей итерации цикла, используйте continue 2.


Замечание:

Заметьте, что конструкция swich/case использует неточное сравнение (==).

Следующие два примера иллюстрируют два различных способа написать то же самое. Один использует серию операторов if и elseif, а другой — оператор switch:

Важно понять, как оператор switch выполняется, чтобы избежать ошибок. Оператор switch исполняет строчка за строчкой (на самом деле выражение за выражением). В начале никакой код не исполняется. Только в случае нахождения оператора case, значение которого совпадает со значением выражения в операторе switch, PHP начинает исполнять операторы. PHP продолжает исполнять операторы до конца блока switch либо до тех пор, пока не встретит оператор break. Если вы не напишете оператор break в конце секции case, PHP будет продолжать исполнять команды следующей секции case. Например :

В этом примере, если $i равно 0, то PHP исполнит все операторы echo! Если $i равно 1, PHP исполнит два последних оператора echo.
ы получите ожидаемое поведение оператора ('i равно 2' будет отображено) только, если $i будет равно 2. Таким образом, важно не забывать об операторах break (даже если вы, возможно, хотите избежать его использования по назначению при определенных обстоятельствах).

В операторе switch выражение вычисляется один раз и этот результат сравнивается с каждым оператором case. В выражении elseif, выражение вычисляется снова. Если ваше условие более сложное, чем простое сравнение и/или находится в цикле, конструкция switch может работать быстрее.

Список операторов для исполнения в секции case также может быть пустым, что просто передает управление списку операторов в следующей секции case.

Специальный вид конструкции case — default. Сюда управление попадает тогда, когда не сработал ни один из других операторов case. Например:

Выражением в операторе case может быть любое выражение, которое приводится в простой тип, то есть в тип integer, или в тип с плавающей точкой (float), или строку. Массивы или объекты не могут быть здесь использованы до тех пор, пока они не будут разыменованы до простого типа.


Возможен альтернативный синтаксис для управляющей структуры switch. Для более детальной информации, см. Альтернативный синтаксис для управляющих структур.

Возможно использование точки с запятой вместо двоеточия после оператора case. К примеру :

Вернуться к: Управляющие конструкции

php.ru

 $number = 0; var_dump($number); // int(0) 

Если вы измените оператор на case ($number > 0 && $number <= 10000): это странно работает. Но он работает с любым произвольным поиском ( $number > 9091 && $number <= 10000 ).

Даже с полным болотом ниже:

 $number = 0; $jonskeet = false; switch ($number) { case ($jonskeet === true && $number <= 10000): echo "0-10K"; // ...    

Он будет выводить 0-10K даже если одно и то же условие в выражении if не будет работать.

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

 select ($user_rank) { case 0: return "guest"; break; case 1: return "user"; break; // ... default: return "unknown"; break; } 

Но у вас есть длинные условия в case вашего кода.

 case ($number <= 10000): echo "0-10K"; break; case ($number > 10000 && $number <= 20000): echo "10-20K"; break; 

Выполнение этого сначала переводит $number <= 10000 в TRUE и $number > 10000 && $number <= 20000 в FALSE , как и два оператора. И после этого ваш код выполняется следующим образом:

    
case TRUE: echo "0-10K"; break; case FALSE: echo "10-20K"; break;

$number равно 0 , но он также может вызывать FALSE в FALSE , поэтому вы получаете не желаемый результат.

В качестве решения вы должны перевести свой код для установки ifelseifelse :

  if ( $number < 10000 ) { echo "0-10K"; } else if ( $number > 10000 && $number <= 20000 ) { echo "10-20K"; // ... } else { echo "N/A"; } 

ruphp.com

Конструкция switch в PHP

Конструкция switch может стать альтернативой использования if, else, elseif. Лично я в своих проектах использую и switch и if, else, elseif, смотря по ситуации, что будет уместней. Итак, как это работает:

<?php switch (переменная) {  case 'возможное значение1' : 'выполнить что-то'; break;  case 'возможное значение2' : 'выполнить что-то другое'; break;  case 'возможное значение3' : 'выполнить ещё что-то'; break;  default: echo 'ничего не подошло :('; // default не обязателен } ?> 

break как и default ставить не обязательно, но если не ставить в конце каждого кейса (case) break, то после того как PHP найдёт нужный кейс, он выполнит все остальные инструкции ниже по коду, вне зависимости от того, подходят остальные кейсы или не подходят. Пример:

 <?php header('Content-Type: text/html; charset=utf-8'); 
$color = 'зелёный'; switch ($color) { case 'красный' : echo 'Ваш любимый цвет красный <br />'; case 'зелёный' : echo 'Ваш любимый цвет зелёный <br />'; case 'жёлтый'  : echo 'Ваш любимый цвет жёлтый <br />'; case 'серый'   : echo 'Ваш любимый цвет серый <br />'; default: echo '<span style="color:red;font-weight:900">Мы не знаем какой у вас любимый цвет</span>'; } ?>

Результат:

Switch в PHP

Нужно вам такое поведение (без break) или не нужно зависит от конкретной ситуации, чаще всего не нужно. Ещё раз обращаю ваше внимание, что всё то же самое можно было сделать с помощью if, else и тд., но в данном случае применение свича гораздо наглядней, чем громоздить кучу if – else, if – else, if – else. В общем, смотрим по ситуации.

Массивы в PHP (array)

Массив – это один из типов переменных в PHP, который обозначает множество переменных внутри одной общей. Обозначается как обычная переменная, после которой идут квадратные скобочки, в которых мы можем указывать название (индекс) ячейки:

<?php $product[0] = "ball"; // индекс 0 $product[1] = "leather ball"; // индекс 1 $product[2] = "silk"; // индекс 2 ?> 

А можем и не указывать индекс:

<?php $product[] = "ball"; // индекс 0 $product[] = "leather ball"; // индекс 1 $product[] = "silk"; // индекс 2 ?> 

Как видите, индексы автоматически расставятся, начиная счёт с нуля.

Если вы где-то забудете указать индекс, хотя перед этим его указывали, то в индекс этой ячейки автоматически присвоится число, которое будет равно наибольшему из предыдущих индексов +1. Смотрим пример:

<?php $product[34] = "ball"; // индекс 34 $product[6] = "leather ball"; // индекс 6 $product[] = "silk"; // индекс 35 $product[88] = "silk2"; // индекс 88 $product[] = "silk3"; // индекс 89 ?> 

Как узнать количество ячеек в массиве?

Чтобы посчитать (узнать) количество ячеек в массиве используется функция count():

<?php $product[34] = "ball"; $product[6] = "leather ball"; $product[] = "silk"; $product[88] = "silk2"; $product[] = "silk3"; 
echo count($product); // выведет в браузер число 5 ?>

Как обратится к конкретной ячейке в массиве?

Для того чтобы выполнить какое-либо действие с нужной нам ячейкой, мы должны написать имя массива (не забыв про знак доллара) и указать индекс нужной нам ячейки:

 <?php echo $product[89]; // silk3 ?> 

Как посмотреть содержимое массива?

Для того чтобы посмотреть содержимое массива вы можете использовать функцию prin_r():

<?php echo '<pre>'; // HTML тег для удобства чтения print_r ($product); echo '</pre>'; ?> 

Результат:

содержимое массива

Также очень удобной является функция для просмотра массивов (и не только) var_dump ():

<?php echo '<pre>'; var_dump ($product); echo '</pre>'; ?> 

Результат:

тип array

В отличие от предыдущей функции, функция var_dump () сразу считает общее количество ячеек и показывает тип каждой из них.

Второй способ создать массив

Итак, с массивами в PHP мы уже немного знакомы, давайте теперь рассмотрим другой способ их создания, который будет гораздо компактней:

<?php $product = array("silk", "ball", "leather"); //тоже, что и $product = array(0=>"silk1", 1=>"ball", 2=>"leather"); // задаём индексы вручную ?> 

Вариант создания массива, рассмотренный в начале статьи, и данный вариант полностью идентичны, отличаются лишь синтаксисом написания.

Ассоциативные массивы

Ассоциативные массивы – это те же самые массивы, только с одним отличием – их индексы вместо цифр содержат слова (строки). Пример:

<?php $sport['basketball'] = '78:95'; $sport['football'] = '3:2'; $sport['handball'] = '24:15'; 
echo $sport['handball']; // получим 24:15 ?>

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

<?php $sport = array('basketball'=>'78:95', 'football'=>'3:2', 'handball'=>'24:15');  ?> 

Как правильно записывать индексы ячеек и значения ячеек: в одинарных или двойных кавычках? О разнице двойных и одинарных кавычек я подробно писал в статье об экранировании и спецсимволах PHP. Для тех, кому не хочется переходить по ссылке, коротко отвечу: лучше в одинарных кавычках, но и так и так правильно.

Также обращаю ваше внимание на то, что вы можете делать и смешанные массивы, где в индексах ячеек будут встречаться как числа, так и строки.

Многомерные массивы (array)

Многомерный массив – это обыкновенный массив, в одной или более ячеек которого содержится ещё один массив. То есть когда внутри массива среди прочих ячеек есть ячейка с массивом, это и называется многомерным массивом. Пример:

<?php $users = array(  0 => array(  "login" => "Admin",  "password" => "fdg4gfd"  ),  1 => array(  "login" => "Arnold",  "password" => "ef4mgj5"  ) ); 
echo $users[0]["login"]; // "Admin" ?>

Вас мог смутить такой стиль записи, до этого я писал массив в одну строку, но если вы читали вводную статью о PHP, то знаете, что в PHP инструкции можно разрывать и ставить Enter столько раз, сколько вам захочется. Это сделано с целью, чтобы можно было гибко форматировать код и делать его более структурированным и читабельным. Реальным примером применения массивов на практике может послужить мой кейс по созданию ротации баннеров для любого сайта.

Константы в PHP

Константы в PHP объявляются с помощью функции define(), где в круглых скобках сначала указывается имя константы, далее через запятую её значение. В PHP константы принято записывать заглавными буквами, однако это лишь условность, а не правило, то есть вы можете называть константу и маленькими буквами, всё прекрасно работает и так и так. Но я вам рекомендую придерживаться общепринятого тона и писать константы БОЛЬШИМИ буквами, так они сразу выделяются в коде. И ещё, естественно, значение константы не может быть переменной. Пример:

<?php define('NAME','Sergey'); echo NAME; // выводим значение константы в браузер. Напишет: Sergey ?> 

Отличия констант и переменных

В отличие от переменных:

  • Константу нельзя удалить самостоятельно с помощью функции unset()
  • Ей нельзя присвоить другое значение или изменить старое, например, при арифметической операции.
  • Следовательно, вы не можете использовать оператор присваивания по отношению к константе:
  • <?php define('NAME','Sergey'); NAME = 'hello!'; // Нельзя ?> 
  • Константы доступны в любом месте, без учёта области видимости.
  • Константы не имеют приставки в виде знака доллара.

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

 <?php error_reporting(E_ALL); // вывод абсолютно всех ошибок, даже самых мелких ?> 

Если вы хотите проверить, существует ли уже какая-нибудь константа, вы можете использовать функцию defined() (перед этим была define(), не запутайтесь):

<?php define('NAME','Sergey'); echo defined('NAME'); // выведет 1, так как константа существует, либо пустоту (true или false) ?> 

Важно! При использовании defined() не забывайте заключать имя константы в кавычки. Стоит также отметить, что константы, так же как и переменные регистро-зависимы! Однако для констант это правило можно отключать при их создании, чего я не советую и даже не вижу смысла, только запутаете себя. Но возможно вам это пригодится, поэтому чтобы отключить регистро-зависимость констант, нужно при их создании указать третий параметр true:

 <?php define('NAME','Sergey',true); echo naMe; // выведет Sergey, так как мы отключили регистро-зависимость. ?> 

Механизм защиты Joomla с помощью констант

Ещё одним прекрасным примером использования констант послужит система защиты от прямого обращения к файлам в Joomla. Что вообще означает эта фраза? Представьте Joomla (или любой другой движок), в ней есть множество файлов с расширением .php, которые при необходимости подключаются на лету в главный файл – index.php. На этом взаимодействии и строится основной принцип динамических сайтов на PHP: у нас существует один единственный файл (index.php), который в зависимости от ситуации подключает другие файлы, образуя тем самым разные страницы сайта и всевозможную остальную функциональность.

А теперь представьте ситуацию, когда один из файлов отвечает за отправку почты, то есть каждый раз когда мы его подключаем он отправляет письмо о новом комментарии на вашем сайте. В случае Joomla и других Open Source (бесплатных) CMS (WordPress, Magenta, Monstra и тд.) я могу взять и посмотреть, где именно находится этот файл, то есть узнать его путь.

Что мне это даёт? Зная путь к файлу, я могу написать его прямо в адресную строку, тем самым заставлю его отработать (проиграть свой код). К примеру, путь к моей карте сайта находится по адресу:

корень сайта/maps/sitemap1.xml

Значит, в адресную строку мне нужно написать:

http://site-on.net/maps/sitemap1.xml

И вы увидите мою карту сайта, если бы она там была 🙂 Так вот зная путь к файлу отправки писем, каждый раз, когда я буду вбивать его адрес в строку браузера вам будет приходить письмо якобы о новом комментарии. Обновлю страницу 10 раз, письмо придёт 10 раз, хотя комментарий никто и нигде не оставлял. Напишу скрипт, который будет автоматически обновлять страницу, и пойду по делам, или спать. А в это время на ваш сайт и почтовый сервер будет создаваться постоянная нагрузка.

Это был слегка идеализированный пример, но на практике всё почти что так и есть. И таких бед можно придумать и создать до бесконечности. Даже если вы делали сайт на собственном движке, о котором не знают даже ваши родные и близкие, то продвинутым людям всё равно не составит труда узнать пути ко всем вашим файлам.

Как же нам запретить обращаться ко всем .php файлам из строки браузера (запретить прямой доступ к файлам)? Вы можете придумать разные изощрения, а можете поступить так же, как сделали разработчики Joomla и я на своём блоге.

На самом деле это гениально и очень просто: в главном файле нашего сайта – index.php нужно создать константу с любым значением и названием, например, числом 1, как это сделали разработчики Joomla или логическим значением TRUE, как это сделал я на этом блоге:

В Joomla:

PHP константы

На моём блоге:

защита Joomla

Как видите, это делается преимущественно в начале index.php, а главное ДО первого подключения внешнего PHP скрипта.

Затем первой строчкой КАЖДОГО подключаемого файла мы должны писать следующую проверку:

 defined('_JEXEC') or die;

в случае Joomla и:

 defined('SECURE') or die;

в моём случае.

Мы проверяем, существует ли данная константа, если существует, то продолжаем работу, а если нет – прекращаем работу всех скриптов и отдаём злоумышленнику пустую белую страницу. Вот и всё, единственный минус данного метода заключается в том, что если у вас уже есть сотня другая php файлов, вам придётся заходить в каждый файл и дописывать эту строку.

Кстати, если вы ещё не знаете, как навсегда избавиться от проблемы дублей страниц в Joomla, VirtueMart, WordPress или любой другой CMS, то предлагаю вам прочесть мой метод по ссылке выше.

site-on.net

Вы можете рассматривать PHP оператор switch как альтернативу нескольким операторам if, это управляющая структура с рядом вариантов. Для каждого варианта вы можете определить действие. Цикл switch отлично подходит для реализации выбора с большим количеством вариантов. Он строится на основе условия и нескольких операторов case, каждый из которых может привести к действию.

Вот пример:

Первая пара строк используется для получения ответа на наш вопрос из строки запроса.

Оператор switch PHP состоит из ключевого слова switch и проверяемого выражения. Мы используем переменную $answer, которая будет содержать значение, переданное через строку запроса. Внутри оператора switch мы определяем наши варианты. Первый вариант — значение по умолчанию. В нем мы используем ключевое слово default, чтобы определить действие, которое будет происходить только тогда, когда ни один из других вариантов не соответствует заданному условию.

В нашем примере это позволяет вывести вопрос, который мы хотим задать и несколько ссылок для ответа на него. Мы спрашиваем у пользователя, какую версию PHP он использует. Как только он нажмет на одну из ссылок, мы выведем ответ. Если ответ не выбран или если вводится неопределенный вариант, мы выводим вопрос, так как это наш вариант default.

Каждый вариант объявляется с помощью ключевого слова case, далее – значение, которое хотим проверить. Потом код, который хотим выполнить, если у нас подходящий case, и затем оператор break, который завершит цикл, если выражение case соответствует условию.

PHP оператор switch позволяет сгруппировать несколько вариантов в одном case. С его помощью в PHP вы также можете сравнить строки.

Вот небольшой пример:

Перевод статьи “The switch statement” был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru

Конструкция if-else

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

То есть нам нужно иметь возможность спросить у PHP ‘Если’.

Например так: если эта переменная меньше нуля, то вывести ‘отрицательно’, иначе (то есть если она больше нуля) вывести ‘положительно’.

В PHP для таких вопросов предназначена конструкция if, которая позволяет выполнять определенный код при выполнении какого-либо условия:

Обратите внимание на то, что блок else не обязателен.

Логическое выражение представляет собой тот самый вопрос, который мы хотим задать PHP. Например, чтобы спросить ‘переменная $a больше нуля’ мы напишем так: $a > 0.

Примеры работы:

Сокращенный синтаксис

В случае, если в фигурный скобках if или else будет только одно выражение, можно эти фигурные скобки не писать:

Равенство по значению и типу

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

Почему так? Потому что одиночное равно зарезервировано за присваиванием. Смотрите пример:

А следующий пример работать будет не так, как мы думаем:

Кроме оператора == существует еще и оператор ===. Их различие в том, что === сравнивает не только по значению, но и по типу, а == сравнивает только по значению.

Чтобы полностью разобраться в этом, внимательно изучите примеры:

Не равно

Для того, чтобы спросить ‘не равно’, существует операторы != и !==. Первый игнорирует различие в типах, а второй — нет.

Все операции сравнения

Возможные операции сравнения, которые можно использовать внутри if:

$a == $b $a равно $b
$a === $b $a равно $b и они одинаковы по типу
$a != $b $a не равно $b
$a !== $b $a не равно $b или $a равно $b, но ни разные по типу
$a < $b $a меньше $b
$a > $b $a больше $b
$a <= $b $a меньше или равно $b
$a >= $b $a больше или равно $b

Функция empty

Зачастую в веб-программировании возникает следующая проблема: необходимо проверить переменную на пустоту.

Переменная будет пустая, если она равна нулю, » (пустой строке), false или null (то есть не определена ранее).

Проверка на пустоту выполняется с помощью функции empty():

Чаще возникает обратная задача — проверка на то, что переменная является НЕ пустой. Отрицание НЕ можно сделать с помощью оператора ‘!’:

Функция isset

Аналогом empty является функция isset. Она проверяет существует ли переменная (то есть то, что она не равна null). Смотрите примеры:

Аналогично проверятся на НЕ существование (через !isset):

Несколько условий сразу: or и and

Иногда может быть нужно составить какое-то сложное условие, например, пользователь вводит месяц своего рождения и вам нужно проверить, что введенное число больше или равно 1 и меньше либо равно 12 (так как в году 12 месяцев).

Для этого существуют операторы and (логическое И) и or (логическое ИЛИ).

Вместо and можно писать &&, а вместо or||.

Работа с логическими переменными

Многие функции PHP в результате своей работы возвращают либо true (истина), либо false (ложь). Эти значения довольно удобны при своей работе, но новичкам бывает довольно сложно понять их.

Представим себе, что переменная $a равна true. В таком случае конструкцию if можно записать так:

Так как такие сравнения довольно распространены в PHP, то существует специальный прием, облегчающий работу (но не понимание, к сожалению).

Прием такой: конструкцию $a == true можно заменить на более простую: вместо if ($a == true) написать if ($a) и она будет работать аналогично.

Следует пользоваться второй конструкцией, так как она проще.

Также обратите внимание на следующие примеры:

Работа вместе с HTML

PHP устроен таким образом, что его можно использовать в одном файле с HTML. Представьте, что у нас возникает такая задача: если пользователь авторизован — вывести его логин, иначе ссылку на авторизацию. Ее можно решить, смешивая PHP код и HTML код вместе.

Посмотрите примеры:

Однако, очень часто это может оказаться неудобным, особенно если размеры HTML кода очень большие. Поэтому можно воспользоваться следующим приемом с разрывом PHP:

Вложенные if

Предположим, нам необходимо спросить у PHP такую вещь: если переменная $a пуста, то вывести ‘Введите $a’, если не пуста, то проверить — больше нуля $a или нет. Если больше нуля — то вывести ‘Больше нуля!’, если меньше — вывести ‘Меньше нуля’.

Одной конструкцией if здесь не обойтись, нужно использовать две таким образом, чтобы одна была внутри другой:

Конструкция elseif

Недостатком конструкции предыдущего примера является большое количество фигурных скобок. Поэтому была изобретена специальная конструкция elseif (пишется слитно!), которая представляет собой одновременно и else, и начало вложенного if:

Можно использовать несколько elseif, но злоупотреблять этим не стоит (лучше будет воспользоваться конструкцией switch-case, о которой ниже).

Несколько if

Пусть у нас есть такая задача: сайт поддерживает 3 языка — русский, английский, немецкий. Переменная $lang может принимать 3 значения — ‘ru’, ‘en’ и ‘de’. В зависимости от значения переменной $lang следует вывести фразу на одном из языков.

Решение: можно было бы воспользоваться вложенными ифами или elseif. Выглядело бы это примерно так:

Такое решение не слишком красивое — блок else здесь не нужен! Проще всего будет написать не один длинный if с несколькими else, а несколько if вообще без else:

Однако, это решение тоже не слишком удобно. Представьте, что у вас будет не три языка, а 10 — вам придется написать 10 конструкций if.

Для таких случаев существует конструкция switch-case.

Конструкция switch-case

Конструкция switch-case представляет собой альтернативу if-else, ее рекомендуется использовать в случае множественного выбора (например, 10 различных языков, как в нашей задаче).

Изучите ее синтаксис:

Решим нашу задачу с тремя языками с помощью данной конструкции:

code.mu

Оператор switch

Часто вместо нескольких расположенных подряд операторов if else целесообразно воспользоваться специальной конструкцией switch-case. Оператор switch сравнивает значение условного выражения с несколькими значениями. Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Для сравнения в switch используется оператор равенства (==).

Представим себе переменную $action, которая может иметь значения "JUMP" (прыгать), "SWEEM" (плавать), "FLY" (летать). Оператор switch позволяет легко определить блок кода, который должен исполняться для каждого из этих значений. Чтобы показать разницу между операторами if и switch, выполним проверку переменной на соответствие нескольким значениям. Следующий пример показывает два различных способа сделать то же самое. Первый способ использует серию операторов if и elseif, а второй — оператор switch:

  <?php     $action = 'JUMP';     if ($action == 'JUMP') {   echo "Мне нравится прыгать.";   } elseif ($action == 'SWEEM') {   echo "Я люблю плавать.";   } elseif ($action == 'FLY') {   echo "Хотел бы я научиться летать.";   }     switch ($action) {   case 'JUMP':   echo "Мне нравится прыгать.";   break;   case 'SWEEM':   echo "Я люблю плавать.";   break;   case 'FLY':   echo "Хотел бы я научиться летать.";   break;   }    ?>  

Оператор switch берет значение, возвращаемое условным выражением, и начинает сравнивать его со всеми значениями, стоящими рядом с ключевым словом case (метка), в порядке их следования. Как только совпадение обнаружено, выполняется соответствующий блок кода. Если соответствие не найдено, не исполняется ни один из блоков.

Примечание: условное выражение должно возвращать значение элементарного типа, например число или строку.

case

Обратите внимание, что за ключевым словом case каждый раз следует значение (литерал), после которого должно обязательно стоять двоеточие. Тип значения, указанного после оператора case, должен совпадать с типом значения возвращаемого условием. Перед началом исполнения тела (содержимое между фигурными скобками) оператора switch, переменная указанная в скобках, должна быть инициализирована каким-нибудь значением, поскольку это значение будет сравниваться со значениями, указанными после case. Инструкции, расположенные после case, будут исполняться до тех пор, пока не встретится оператор break.

Примечание: в операторе case может быть использовано любое выражение, которое приводится к простому типу, то есть к числу (integer), вещественному числу (float), строке (string) или логическому значению (bool).

break

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

Конструкции case в операторе switch задают только начальную точку выполняемого программного кода, но не задают никаких конечных точек. В случае отсутствия ключевого слова break, оператор switch начнёт выполнение блока кода с метки (case), значение которой соответствует значению условного выражения, и продолжит выполнение инструкций до тех пор, пока не дойдет до конца всего блока. Поэтому стоит быть аккуратнее и не забывать завершать каждый блок case оператором break. В следующем примере показано, что происходит при отсутствии ключевого слова break:

  <?php   $action = 'JUMP';     switch ($action) {   case 'JUMP':   echo "Мне нравится прыгать.<br>";   case 'SWEEM':   echo "Я люблю плавать.<br>";   case 'FLY':   echo "Хотел бы я научиться летать.<br>";   }    ?>  

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

  <?php      $a1 = 2;     switch ($a1) {   case 1:    case 2:   case 3:    echo "$a1 равно 1, 2 или 3";    break;   case 6:    echo "$a1 равно 6";    break;   }    ?>  

Обратите внимание на этот пример: список инструкций для выполнения в секции case может быть пустым, в этом случае управление просто передается далее по списку — следующему оператору case.

continue

Обратите внимание: оператор continue применяется в конструкциях switch и действует подобно оператору break.

  <?php      $a1 = 2;     switch ($a1) {   case 1:    case 2:   case 3:    echo "$a1 равно 1, 2 или 3";    continue;   case 6:    echo "$a1 равно 6";    continue;   }    ?>  

Выбор по умолчанию

Если значение условного выражения не совпало ни с одним из предложенных значений в секциях case, оператор switch позволяет выполнить некоторые действия по умолчанию. Для этого используется ключевое слово default. Работает оно следующим образом: если значение возвращаемое условием не совпало ни с одним из предложенных значений в секциях case, оператор switch начинает выполнение инструкций расположенных в секции default.

  <?php    $action = 5;    switch ($action) {   case 'JUMP':   echo "Мне нравится прыгать.<br>";   case 'SWEEM':   echo "Я люблю плавать.<br>";   case 'FLY':   echo "Хотел бы я научиться летать.<br>";  	default:  	 echo 'Что-то мне вообще лень, что-либо делать.';  }    ?>  

Оператор default обычно указывается в конце тела switch, после всех меток (case). Это логичное и обычное место для него, но на самом деле, оператор default может быть расположен в любом месте внутри конструкции switch. Так как блок кода расположенный в секции default обычно является последним в теле switch, ключевое слово break чаще всего опускают.

Дополнительные сведения

Возможно у вас возник вопрос когда же лучше использовать оператор switch, если тоже самое можно сделать используя оператор if else? Ответить на этот вопрос можно так: в операторе switch выражение вычисляется всего один раз и этот результат сравнивается с каждым значением оператора case. В условных выражениях elseif, значение выражения вычисляется каждый раз заново. Если ваше условие более сложное, чем простое сравнение и/или находится к примеру в цикле, в этом случае конструкция switch может работать быстрее, чем elseif.

На последок хотелось бы упомянуть о том, что вместо двоеточия после операторов case и default, можно использовать точку с запятой:

  <?php     $juice = 'Яблочный';      switch ($juice) {   case 'Яблочный';   case 'Апельсиновый';   case 'Банановый';   echo 'Хороший выбор';   break;   default;   echo 'Я не определился с соком.';   break;   }    ?>  

puzzleweb.ru


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector