Условия if, else и switch в PHP
В этой статье будет разобран механизм условий if. В программировании условие if — это одни из основных инструментов. Давайте посмотрим, как это работает:
<?php if( /* условие */ ){ /* код в этих скобках будет выполняться, если "условие" является правдой */ }else{ /* код в этих скобках будет выполняться, если "условие" является ложью */ } ?>
Обратите внимание, что можно записать if( … ){ … } без блока else{ … }. Также можно записать оба блока без фигурных скобок, но тогда выполнится только следующая строчка после if или else. Приведём пример и попробуем написать код с возможными условиями:
<?php $a = 4; if( $a < 5 ) echo 'Это правда'; // значение $a меньше 5 if( $a <= 5 ) echo 'Это правда'; // значение $a меньше или равно 5 if( $a > 3 ) echo 'Это правда'; // значение $a больше 3 if( $a >= 3 ) echo 'Это правда'; // значение $a больше или равно 3 if( $a == 4 ) echo 'Это правда'; // значение $a равно 4 if( $a == 2 * 2 ) echo 'Это правда';// значение $a равно 4 (потому что 2*2=4) if( $a != 7 ) echo 'Это правда';// значение $a НЕ равно 7 ?>
Во всех перечисленных примерах будет выведена строка «Это правда», потому что условие выполняется.
Не забывайте, что одиночное равно «=» делает операцию присваивания. А двойное «==» сравнивает значения. Условие с одним равно
Помимо сравнения по значению есть ещё и сравнение по типу. К примеру:
<?php $a = true; // тип данных boolean (имеет два значения true и false) if( $a === true ) echo 'Это правда'; // значение $a имеет тип и равно true if( $a !== false ) echo 'Это правда'; // значение $a не имеет тип или не равно false ?>
Условие может быть как в одну строку, так и в несколько. Ещё условие может содержать конец и начало PHP кода. Приведём пример:
<?php $a = 1; if( $a == 1 ){ ?> <div>Условие выполнено</div> <?php }else{ ?> <div>Условие не выполнено</div> <?php } ?>
Если запустить такой код, то на экране появится HTML страница с блоком «<div>Условие выполнено</div>». Подобную запись, когда в условие if вставляют разрыв PHP кода, можно встретить довольно часто в больших проектах.
Помимо if и else есть ещё elseif. Последнее используется для создания множественных условий. Приведём наглядный пример:
<?php $a = 2; if( $a == 1 ){ echo $a . ' == 1'; }elseif($a < 3){ echo $a . ' < 3'; }elseif($a <= 2){ echo $a . ' <= 2'; }else{ echo 'Ничего не подходит'; } ?>
В таком коде условия будут проверять по порядку. Сначала проверится $a == 1 и оно окажется ложью. Будет проверено следующее условие по списку $a < 3 — это условие является истиной, поэтому в результате выполнения этого PHP кода на экран браузера будет выведен текст «
Возможно сделать несколько проверок внутри скобок if( … ). Для этого используются логические операторы and (и) / or (или). Также возможно ставить скобки внутри условий. Эти скобки работают как скобки в математике. Разберём всё на примере:
<?php $a = 2; $b = 3; $c = 4; if( $a == 2 and $b < $c ){ // код здесь будет выполняться, потому что условие - истина } if( $a == 2 and ($b < $c and $c < $a ) ){ // код здесь НЕ будет выполняться, потому что условие - ложь ($c больше $a) } if( $a == 2 or ($b < $c and $c < $a ) ){ // код здесь будет выполняться, потому что условие - истина. Несмотря на то, что часть выражения после "or" является ложью } ?>
Если необходимо выполнить разный код при определённых значениях аргумента, то для большого количества проверок подойдёт switch( .
<?php $a = 2; switch ($a) { case 1: echo 'Переменная $a равна одному'; break; case 2: echo 'Переменная $a равна двум'; break; case 'три': echo 'Переменная $a равна трём'; break; default: echo 'Значение не найдено'; break; } ?>
В результате выполнения этого кода на экране браузера появится надпись «Переменная $a равна двум«. Это происходит потому, что функция switch берёт значение переменной $a и начинает сравнивать со значениями, которые стоят после слова «
Конструкции switch в реальных проектах сайтов встречаются довольно редко. Обычно хватает if-else, или на крайний случай несколько раз вложенных if-else.
Была ли эта статья полезна? Есть вопрос?
Закажите недорогой хостинг Заказать
Условие if-else в PHP
Условный оператор if-else часто называют оператором ветвления, т.к. он обеспечивает выполнение определенной команды только при условии истинности некоторого логического выражения. Его формат таков:
if (логическое выражение) итструкция1; else итструкция2;
if (логическое выражение) итструкция1; else итструкция2; |
Если логическое выражение истинно,то выполняется инструкция1, а иначе — инструкция2. Конструкция else может опускаться.
Это своего рода точка принятия решения в программе. Представим что интерпретатор PHP это человек собирающийся перейти дорогу и напишем для него инструкцию:
$light = «зеленый»; if ($light == «зеленый»){ echo «переходим дорогу»; } else{ echo»стоим на месте»; }
1 2 3 4 5 6 7 | $light = «зеленый»; if ($light == «зеленый»){ echo «переходим дорогу»; } else{ echo»стоим на месте»; } |
Рассмотрим эту конструкцию подробней. Мы пишем слово if и в круглых скобках указываем условие, после этого открываем фигурные скобки и в них описываем действие которое будет выполняться при этом условии. Дальше пишем слово else(что означает «иначе») и указываем в фигурных скобках как следует поступить программе, если первое условие не выполняется.
Оператор if-else вычисляет значение условного выражения и выполняет тот или иной фрагмент программного кода. Но что, если требуется проверить сразу несколько условий? Тут на помощь к нам придет конструкция elseif. Она позволяет проверять дополнительные условия, пока не будет найдено истинное или достигнут блок else.
С использованием инструкции elseif оператор if-else будет выглядить так:
if (условие) { Блок, выполняемый если условие истинно } elseif (условие) { Блок, выполняемый, если условие истинно } else { Блок, выполняемый, если все условия ложны }
1 2 3 4 5 6 7 8 | if (условие) { Блок, выполняемый если условие истинно } elseif (условие) { Блок, выполняемый, если условие истинно } else { Блок, выполняемый, если все условия ложны } |
Обратите внимание, после закрывающей фигурной скобки не следует ставить точку с запятой.
Один условный оператор можно вложить в другой:
<?php $a=9; $b=33; if ($a > 0 && $b > 0){ if($a<$b){ echo «a меньше чем b»; } else{ echo «a больше чем b»; } } ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $a=9; $b=33;
if ($a > 0 && $b > 0){ if($a<$b){ echo «a меньше чем b»; } else{ echo «a больше чем b»; }
}
?> |
Т.е. выполняется внешнее условие и если все ок(в нашем случае если обе переменные больше нуля), то начинает выполнятся внутреннее условие. Если же внешнее условие не выполнится, то ничего не произойдет — инструкция остановится.
Конструкция if-else имеет еще один альтернативный синтаксис:
if (логическое выражение): команды; elseif (другое логическое выражение): другие команды; else: иначе команды; endif
1 2 3 4 5 6 7 | if (логическое выражение): команды; elseif (другое логическое выражение): другие команды; else: иначе команды; endif |
Обратите внимание на расположение двоеточия. Его пропуск считаеться синтаксической ошибкой. Блоки else и elseif можно пропустить.
Оператор If с && и несколькими условиями ИЛИ в PHP
спросил
Изменено 6 лет, 11 месяцев назад
Просмотрено 19 тысяч раз
У меня возникли проблемы с тем, чтобы приведенный ниже оператор работал так, как я хочу.
Я пытаюсь отобразить сообщение об ошибке для формы заказа, если хотя бы одно текстовое поле не заполнено. Ниже приведен фрагмент моего PHP-кода. «cookieGiftBox» — это имя флажка, который пользователи могут выбрать, и если он установлен, они должны ввести количество файлов cookie в соответствии со своими предпочтениями в предоставленных текстовых полях. Как я могу отобразить сообщение об ошибке, которое будет отображаться, когда флажок установлен, но текстовые поля не заполнены?
="
Пожалуйста, введите количество вкусов печенья"; } ?>
- php
- if-statement
- isset
&& имеет приоритет над ||, поэтому для получения ожидаемого результата вам придется использовать скобки:
if (isset($_POSTBox['cookie]GiftGift) && (!isset($POST['sugar']) || ...)
На самом деле, чтобы проверить, не выбрано ли ничего , вы должны сделать что-то вроде этого: , если флажок установлен, а не установлен (отмечен сахар или отмечена шоколадная стружка)
или эквивалент: , если флажок установлен, а сахар не введен и шоколадная стружка не введена...
.
Если вы хотите узнать больше, поищите информацию о булевой алгебре.
Обновление: в вашем примере и в правильном синтаксисе предложение, которое я взял в качестве примера, будет выглядеть так (для первого предложения обратите внимание на не (!) и круглые скобки вокруг полей, а не на флажок):
if ( isset($_POST['cookieGiftBox']) && !( isset($_POST['сахар']) || isset($_POST['шоколадный чип']) ) ) { ошибка . ..}
Или второе предложение, которое может быть легче понять (обратите внимание на && вместо ||):
if (isset($_POST['cookieGiftBox']) && !isset($_POST['сахар']) && !isset($_POST['шоколадный чип']) ) { ошибка...}
Использование ands гарантирует, что оно истинно (и, таким образом, показывает ошибку), только если ни одно из полей сахара, шоколадных чипсов и т. д. не установлено, когда установлен флажок подарочной коробки.
Итак, если флажок установлен, и поля не установлены, это выглядит так: (true && !false && !false)
, что эквивалентно (true && true && true)
, что равно true
, поэтому он показывает ошибку.
Если флажок установлен и введен сахар, это будет выглядеть так: (true && !true && !false)
, экв. до (true && false && true)
, экв. на false
и, таким образом, ошибка не отображается.
Если введены и сахар, и шоколадная стружка, ошибка не появится.
2
У меня похожая проблема:
Я пытаюсь использовать:
if (isset($this->context->controller->php_self) && ($this->context->controller->php_self != 'category' ) || ($this->context->controller->php_self != 'product') || ($this->context->controller->php_self != 'index')){ . .. }
Это не сработало, я изменил его на:
if (isset($this->context->controller->php_self) && ($this->context->controller->php_self != 'category') && ($this->context->controller->php_self != 'product') && ($this->context->controller->php_self != 'index')){ ... }
Я не знаю, правильно ли это?
Редакт. Это неправильно, но пока я не знаю, как это исправить.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
оператор if — PHP множественное ИЛИ в условии if
спросил
Изменено 6 лет, 4 месяца назад
Просмотрено 9к раз
Я пытаюсь проверить в своем PHP-коде, есть ли у моего пользователя необходимые права для выполнения действия, но мои условия не работают. Я, вероятно, неправильно понимаю И/ИЛИ. Могу ли я потребовать вашей помощи, пожалуйста.
На самом деле у меня есть:
if ( !in_array('ADMIN',$_SESSION['roles']) || !in_array('MANAGEMENT',$_SESSION['roles']) || $requester != $ _СЕССИЯ['tnumber'] ) { echo "Вам запрещено ХХХХ !"; } еще { // допустимый }
Я поставил эти 3 условия с операторами OR (||), но они не работают.
Я хочу сказать:
- Если у пользователя нет прав «АДМИНИСТРАЦИЯ» или «УПРАВЛЕНИЕ» (значение в массиве
$SESSION['roles']
) - Или, если пользователь не является запрашивающим (
$requester
должен совпадать с$_SESSION['tnumber']
Тогда он должен получить сообщение о том, что он не допущен.
В противном случае (если у него есть права АДМИНИСТРАТОРА, или права УПРАВЛЕНИЯ, или он запрашивающий), то должно работать.
Как я могу изменить свое условие, чтобы выполнить этот запрос?
Спасибо, С уважением!
- php
- оператор if
- условный оператор
2
В таком условии, как if (p || q || r)
, весь оператор if
оценивается как true
, если хотя бы одно из трех условий true
.