Урок 4. Работа с конструкциями if-else, switch-case в PHP

Урок 4. Работа с конструкциями if-else, switch-case в PHP

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Урок 4. Работа с конструкциями if-else, switch-case в PHP

Урок 4. Работа с конструкциями if-else, switch-case в PHP

www.homa.xp3.biz

Теория

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

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

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

Например так: если эта переменная <0, то вывести 'отрицательно', иначе (т.е. если она > 0) вывести 'положительно'.

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

<?

if(логическое выражение){Этот код выполниться, если логическое выражение верно (т.е. равно true)}

else{Этот код выполнится, если логическое выражение неверно (т.е. равно false)}

?>

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

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

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

<?

$a=3;//Если переменная $a>0, то выведите 'верно', иначе (если < или =0) выведите 'неверно'

if($a>0){echo'Верно!';}else{echo'Неверно!';}//выведет 'Верно!'

?>

<?

$a=-3;//Если переменная $a> или = 0, то выведите 'верно', иначе (если <0) выведите 'неверно'

if($a>=0){echo'Верно!';}else{echo'Неверно!';}//выведет 'Неверно!'

?>

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

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

<?

//Полный вариант:

if($a==0){echo'Верно!';}else{echo'Неверно!';}

//Уберем скобки после if:

if($a==0)echo'Верно!';else{echo'Неверно!';}

//Уберем скобки после else:

if($a==0){echo'Верно!';}else echo'Неверно!';

//Уберем скобки и после if, и после else (обратите внимание на точку с запятой - она осталась):

if($a==0)echo'Верно!';else echo'Неверно!'

?>

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

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

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

<?

$a=0;//Если переменная $a=0, то выведите 'верно', иначе (если не =0) выведите 'неверно'

if($a==0)echo'Верно!';else echo'Неверно!'//выведет 'Верно!'

?>

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

<?

$a=0;//Мы думаем оно работает так: если переменная $a=0, то выведите 'верно', иначе (если не = 0) выведите 'неверно'. На самом деле оно работает так: переменной $a присвоить 1, если удалось присвоить - то выведите 'верно', иначе (если не удалось присвоить) выведите 'неверно'.

if($a=1)echo'Верно!';else echo'Неверно!'//всегда будет выводить 'Верно!'

?>

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

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

<?

$a='0';//переменная $a представляет собой строку, а не число 0

if($a==0)echo'Верно!';else echo'Неверно!'//Выведет 'Верно!', так как проверяется только значение, но не тип. Поэтому '0' равен 0.

?>

<?

$a='0';//переменная $a представляет собой строку, а не число 0

if($a===0)echo'Верно!';else echo'Неверно!'//Выведет 'Неверно!', так как строка '0' не = числу 0 при сравнении по типу.

?>

Не равно

Для того, чтобы спросить 'не равно', существует операторы != и !==. 1-й игнорирует различие в типах, а 2-й - нет.

<?

$a=0;//Если переменная $a не =0, то выведите 'верно', иначе (если не =0) выведите 'неверно'

if($a!=0)echo'Верно!';else echo'Неверно!';//выведет 'Верно!', так как $a равно 0

?>

<?

$a=1;//Если переменная $a не =0, то выведите 'верно', иначе (если не =0) выведите 'неверно'

if($a!=0)echo'Верно!';else echo'Неверно!';//выведет 'Неверно!', так как $a равно 0

?>

<?

$a='0';//Если переменная $a не =0, то выведите 'верно', иначе (если не =0) выведите 'неверно'

if($a!=0)echo'Верно!';else echo'Неверно!'//Выведет 'Неверно!', так как $a равно '0', а различие в типах игнорируется.

?>

<?

$a='0';//Если переменная $a не =0, то выведите 'верно', иначе (если не =0) выведите 'неверно'

if($a!==0)echo'Верно!';else echo'Неверно!'//Выведет 'Верно!', так как $a равно '0', а это не равно 0 при сравнении по типу.

?>

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

Возможные операции сравнения, которые можно использовать внутри 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

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

Переменная будет пустая, если она =0, '' (пустой строке), false или null (т.е. не определена ранее).

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

<?

$a=null;//Если $a пустое, то…

if(empty($a))echo'Верно!';else echo'Неверно!'//выведет 'Верно!'

?>

<?

$a=0;//Если $a пустое, то…

if(empty($a))echo'Верно!';else echo'Неверно!'//выведет 'Верно!'

?>

<?

$a='';//Если $a пустое, то…

if(empty($a))echo'Верно!';else echo'Неверно!'//выведет 'Верно!'

?>

<?

$a='hi';//Если $a пустое, то…

if(empty($a))echo'Верно!';else echo'Неверно!'//выведет 'Неверно!', так как $a не пустая

?>

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

<?

$a=null;//Если $a Непустое, то…

if(!empty($a))echo'Верно!';else echo'Неверно!'//выведет 'Неверно!', так как $a пустое

?>

Функция isset

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

<?

$a='hello';//Если $a существует, то…

if(isset($a))echo'Верно!';else echo'Неверно!';//Выведет 'Верно!', так как $a существует.

?>

<?

$a=0;//Если $a существует, то…

if(isset($a))echo'Верно!';else echo'Неверно!'//Выведет 'Верно!', так как $a существует.

?>

<?//Пусть переменную $a вообще не определяли выше в коде (это все равно, что присвоить ей null). Если $a существует, то…

if(isset($a))echo'Верно!';else echo'Неверно!'//выведет 'Неверно!'

?>

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

<?

$a=3;//Если $a не существует то…

if(!isset($a))echo'Верно!';else echo'Неверно!'//Выведет 'Неверно!', так как $a существует.

?>

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

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

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

<?

$a=3;

$b=-3;//Если $a>0 и $b одновременно <0 то…

if($a>0 and $b<0)echo'Верно!';else echo'Неверно!';//выведет 'Верно!'

$a=3;//Если $a> или =1 и < или =12 то…

if($a>=1 and $a<=12)echo'Верно!';else echo'Неверно!';//выведет 'Верно!'

$a=-3;

$b=-3;//Если $a>0 ИЛИ $b <0 - хотя бы 1 из них, то… выведет 'Верно!', так как хотя $a и не > 0, но 1 из условий - $b<0 - выполнится!

if($a>0 or $b<0)echo'Верно!';else echo'Неверно!'

?>

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

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

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

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

<?

$a=true;//Если $a равно true, то…

if($a==true)echo'Верно!';else echo'Неверно!'//Выведет 'Верно!', так как $a равно true.

?>

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

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

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

<?//Заменим $a==true на более простую: вместо if($a==true) напишем if($a):

$a=true;//Если $a равно true, то…

if($a)echo'Верно!';else echo'Неверно!';//выведет 'Верно!', так как $a равно true

$a=true;//Если $a не true (т.е. false!), то…

if(!$a)echo'Верно!';else echo'Неверно!'//выведет 'Неверно!', так как $a равно true

?>

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

<?//Данное выражение всегда будет выводить 'Верно'

if(true)echo'Верно!';else echo'Неверно!';

//Данное выражение всегда будет выводить 'Неверно'

if(false)echo'Верно!';else echo'Неверно!';

//Данное выражение всегда будет выводить 'Неверно'

if(!true)echo'Верно!';else echo'Неверно!';

//Данное выражение всегда будет выводить 'Верно'

if(!false)echo'Верно!';else echo'Неверно!';

?>

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

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

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

<?

$a=true;

if($a){//Данный HTML код будет виден на экране только если $a равно true

echo'<p>Здесь выведем какой-то HTML!';

}

?>

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

<?//Пример на работу вместе с HTML

$a=true;

if($a){//Мы оборвали PHP, но HTML-код ниже все-равно будет виден на экране только если $a равно true.

?>

Здесь выведем какой-то HTML!

<?//Здесь мы продолжаем PHP, открыв скобку <? и закрываем фигурную скобку от ифа.

}

?>

Вложенные if

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

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

<?

if(empty($a)){//если переменная $a пуста

echo'Введите $a!';

}else{//если переменная $a не пуста

if($a>0){//спрашиваем, > ли 0 переменная $a

echo'Больше 0!';

}else{

echo'Меньше 0!';

}}

?>

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

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

<?//Решение предыдущей задачи через конструкцию elseif

if(empty($a)){

echo'Введите $a!';

}elseif($a>0){//одновременно выполняется else для empty($a) и спрашивается > ли $a 0

echo'Больше 0!';

}else{

echo'Меньше 0!';

}

?>

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

Несколько if

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

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

<?//Решение задачи через elseif - не самое удачное

if($a=='ru'){//фраза на русском

echo'Русский текст';

}elseif($a=='en'){//фраза на английском

echo'Английский текст';

}elseif($a=='de'){//фраза на немецком

echo'Немецкий текст';

}

?>

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

<?//Решение задачи через несколько if - оно намного лучше

if($a=='ru'){//фраза на русском

echo'Русский текст';

}

if($a=='en'){//фраза на английском

echo'Английский текст';

}

if($a=='de'){//фраза на немецком

echo'Немецкий текст';

}//В данном коде сработает только 1 из ифов, так как $a может иметь только 1 из значений

?>

Однако, это решение тоже не слишком удобно. Представьте, что у вас будет не 3 языка, а

10 - вам придется написать 10 конструкций if.

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

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

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

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

<?

switch($переменная){

case'значение1':

здесь код, который выполнится в случае, если переменная имеет значение1;

break;

case'значение2':

здесь код, который выполнится в случае, если переменная имеет значение2;

break;

case'значение3':

здесь код, который выполнится в случае, если переменная имеет значение3;

break;

default:

этот код выполнится в случае, если переменная не совпала ни с 1 значением;

break;

}

?>

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

<?

switch($lang) {

case'ru':

echo'Русский текст';

break;

case'en':

echo'Английский текст';

break;

case'de':

echo'Немецкий текст';

break;

default:

echo'Данный язык не поддерживается';

break;

}

?>

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович:
8-965-148-98-02, diplom07@mail.ru.
Печатать страницу: Урок 4. Работа с конструкциями if-else, switch-case в PHP

Урок 4, Работа с конструкциями if-else, switch-case в PHP, Урок, 4, Работа, с, конструкциями, if-else, switch-case, в, PHP, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, Создание сайтов, web-программирование, seo-продвижение, создание и раскрутка сайтов, вбиваю в топ-10, как гвозди, попробуйте бесплатно, Создание сайтов, web-программирование, seo-продвижение, Урок, 4, Работа, с, конструкциями, if-else, switch-case, в, PHP, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, раскрутка сайтов, Вбиваю в ТОП-10, как гвозди, раскрутка сайтов, Делаю и раскручиваю сайты, Дмитрий Владимирович

×

Ваше письмо