Условные операторы

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

Иногда, в зависимости от условия, нужно выполнять различные действия. Для этого используется оператор if. Например, мы спросили пол посетителя страницы, сохранили его в переменную, а теперь хотим вывести разное приветствие, в зависимости от того, мужчина это или женщина. Здесь пригодятся операторы if и else.

<?php
if ($gender == "мужчина") {
    print("Приветствую тебя, мой Господин!");
} else {
    print("Приветствую тебя, о Госпожа!");
}

Из примера видно, что условная конструкция состоит из трёх частей:

  • условие if — выражение, которое возвращает истинный или ложный результат;
  • блок if — строки кода, которые будут выполнены, если условие вернуло истину;
  • блок else — строки кода, которые будут выполнены, если условие вернуло ложь.

Обратите внимание, что каждый блок обрамляется и ограничивается фигурными скобками.

Множественные альтернативы кода elseif

Конструкция elseif вводит дополнительные условия в программу:

$a = 5;
if($a>0){
    echo "Переменная a больше нуля";
}
elseif($a < 0){
    echo "Переменная a меньше нуля";
}
else{
    echo "Переменная a равна нулю";
}

Можно добавить множество блоков elseif. И если ни одно из условий в if или elseif не выполняется, тогда срабатывает блок else.

Определение условия

Выше в качестве условия применялись операции сравнения. Однако в реальности в качестве условия может применяться любое выражение, а не только такое, которое возвращает true или false. Если передаваемое выражение равно 0, то оно интерпретируется как значение false. Другие значения рассматриваются как true:

if (0) {}       // false
if (-0.0) {}    // false
if (-1) {}      // true 
if ("") {}      // false (пустая строка)
if ("a") {}     // true (непустая строка)
if (null) {}    // false (значие отсутствует)

Выражения

Выражение в языке программирования — это минимальный блок кода, имеющий значение (результат). Звучит несколько сложно, но на практике почти каждая строка сценария является выражением. Вот несколько примеров выражений:

  • $amount = 2 + 2;
  • 2 > 3
  • $gender == "мужчина"

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

Например, результатом выражения 2 > 3 будет «ложь», потому что два, очевидно, меньше трёх.

Другим видом выражений является арифметическое выражение. Результатом выражения $amount = 2 + 2 будет 4.

В каких случаях может понадобиться знать результат выражения?

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

Предположим, что на нашем сайте мы хотим показать определённую картинку только посетителям мужского пола и старше 18 лет. Ранее, в коде сценария, мы уже получили и сохранили год рождения и пол посетителя в переменные $age и $gender.

Напишем выражение и условие для реализации такого поведения:

<?php
if ($gender == "мужчина" and $age > 17) {
    print("<img src='/xxx.jpg'>");
}

Обратите внимание на ключевое слово and — это оператор, который объединяет два отдельных выражения в одно новое. Это новое выражение будет иметь значение «истина», только если оба отдельных выражений будут истинны.

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

Тернарная операция

Тернарная операция состоит из трех операндов и имеет следующее определение: [первый операнд - условие] ? [второй операнд] : [третий операнд]. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true, то возвращается второй операнд; если условие равно false, то третий. Например:

$a = 1;
$b = 2;
$z = $a < $b ? $a + $b : $a - $b;
echo $z;

Если значение переменной $a меньше $b и условие истинно, то переменная $z будет равняться $a + $b. Иначе значение $z будет равняться $a - $b

Понятие алгоритма

Многие из нас что-то слышали про алгоритмы на уроках информатики в школе. К сожалению, далеко не все школьные знания остаются с нами после её окончания. Тем не менее понимание, что такое алгоритмы, и умение их строить — это очень важные навыки, без которых не получится решать даже относительно простые задачи.

Если говорить простыми словами, то алгоритм — это просто очень подробный план работы. Мы все в течение жизни что-нибудь планируем: отпуск, какое-нибудь мероприятие, своё самостоятельное обучение и тому подобное. От простого списка шагов алгоритм отличает существование условий и повторяющихся действий. Если вы в состоянии создать хороший, подробный алгоритм для реализации, скажем, какой-нибудь возможности на сайте, то можно считать, что половина дела уже сделана!

Разберём для примера один алгоритм средней сложности. На сайт нужно добавить форму обратной связи. Пользователь может заполнить эту форму, указать там свои контактные данные и написать сообщение. Информация из заполненной формы отправляется на электронную почту владельцу сайта. Вот как будет выглядеть алгоритм для этой задачи:

  1. Показать форму.
  2. Проверить, что форма отправлена.
  3. Составить список полей формы, обязательных для заполнения.
  4. Для каждого поля из списка проверить, что оно заполнено.
  5. Если поле не заполнено, показать ошибку и не отправлять форму.
  6. Если все поля заполнены, сформировать сообщение электронной почты.
  7. Отправить сообщение на адрес администратора сайта.

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

Конструкция switch..case является альтернативой использованию конструкции if..elseif..else. Оператор switch получает некоторое выражение и сравнивает его с набором значений:

switch (выражение){
    case значение1: действия; break;
    case значение2: действия; break;
    //...........................
    case значениеN: действия; break;
}

После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase. И если совпадение будет найдено, то будет выполняться определенный блок сase.

Конструкция switch может содержать произвольное количество операторов case. В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков.

Весь блок switch помещается в фигурные скобки, однако блок каждого отдельного оператора case НЕ помещается в фигурные скобки.

Например, возьмем следующую конструкцию if..elseif..else:

$a = 3;
if($a==1)     echo "сложение";
elseif($a==2) echo "вычитание";
elseif($a==3) echo "умножение";
elseif($a==4) echo "деление";

Теперь перепишем ее с помощь конструкции switch..case:

$a = 3;
switch($a)
{
    case 1: 
        echo "сложение";
        break;
    case 2: 
        echo "вычитание";
        break;
    case 3: 
        echo "умножение";
        break;
    case 4: 
        echo "деление";
        break;
}

То есть на вход в конструкцию switch передается переменная $a<, и ее значение последовательно сравнивается со значениями, указанными после операторов case. Так, в данном случае переменная $a равна 3, поэтому выполнение дойдет до блока

case 3: 
    echo "умножение";
    break;

Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default:

$a = 3;
switch($a)
{
    case 1: 
        echo "сложение";
        break;
    case 2: 
        echo "вычитание";
        break;
    default: 
        echo "действие по умолчанию";
        break;
}

match

Начиная с версии 8.0 в PHP была добавлена поддержка другой, похожей конструкции – match. Она позволяет оптимизировать конструкцию switch. Конструкция match также принимает некоторое выражение и сравнивает его с набором значений.

$a = 2;
$operation = match($a)
{
    1 => "сложение",
    2 => "вычитание",
    default => "действие по умолчанию",
};
echo $operation;

Итак, match в скобках также принимает некоторое сравниваемое выражение (в данном случае это переменная $a). Сам блок кода match также обертывается в фигурные скобки, однако в конце после закрывающей фигурной скобки необходимо поставить точку с запятой. А вместо операторов case просто указываются значения, с которыми сравнивается выражение.

Но в отличие от switch, конструкция match возвращает некоторый результат. Поэтому после каждого сравнимого значения ставится оператор =>, после которого идет возвращаемый результат.

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

Задачи

Реализуйте страницу с использованием всех условных операторов: if … elseif … else, тернарного ?, switch … case, match

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

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