Условия 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
?>

Во всех перечисленных примерах будет выведена строка «Это правда», потому что условие выполняется.

Не забывайте, что одиночное равно «=» делает операцию присваивания. А двойное «==» сравнивает значения. Условие с одним равно

if($a = 1) всегда будет исполняться.

Помимо сравнения по значению есть ещё и сравнение по типу. К примеру:

<?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 кода на экран браузера будет выведен текст «

2 < 3«. Но если бы и это условие не подошло, то было бы проверено следующее $a <= 2. Но если и оно бы не подошло, то была бы выполнено то, что стоит в else{ . .. } — на экран бы было выведен текст «Ничего не подходит«.

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

case«. Эти значения могут быть как строки, так и числа. В примере $a = 2, поэтому функция выполнила код, стоящий в пункте «case 2:«.

Конструкции switch в реальных проектах сайтов встречаются довольно редко. Обычно хватает if-else, или на крайний случай несколько раз вложенных if-else.

Была ли эта статья полезна? Есть вопрос?

Закажите недорогой хостинг Заказать

всего от 290 руб

Условие 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 (||), но они не работают.

Я хочу сказать:

  1. Если у пользователя нет прав «АДМИНИСТРАЦИЯ» или «УПРАВЛЕНИЕ» (значение в массиве $SESSION['roles'] )
  2. Или, если пользователь не является запрашивающим ( $requester должен совпадать с $_SESSION['tnumber']

Тогда он должен получить сообщение о том, что он не допущен.

В противном случае (если у него есть права АДМИНИСТРАТОРА, или права УПРАВЛЕНИЯ, или он запрашивающий), то должно работать.

Как я могу изменить свое условие, чтобы выполнить этот запрос?

Спасибо, С уважением!

  • php
  • оператор if
  • условный оператор

2

В таком условии, как if (p || q || r) , весь оператор if оценивается как true , если хотя бы одно из трех условий true .