Условия в PHP

05.06.2017 в 17:34
92620
+7264

Всем привет! Вот и очередной урок по PHP подоспел. Сегодняшняя тема – одна из самых любимых у тех, кто начинает программировать. Ещё бы, ведь условия в PHP – это то, что позволяет нам составлять различные алгоритмы. Именно в зависимости от условий программа будет вести себя так или иначе. И именно благодаря им мы можем получать разный результат при разных входных данных. В PHP имеются несколько конструкций, с помощью которых можно реализовать условия. Все они используются, и имеют свои преимущества в разных ситуациях, или, если хотите – условиях. Кругом одни условия, не так ли? Так. Никто ведь не будет спорить, что в реальной жизни в зависимости от обстоятельств мы поступаем по-разному. В программировании это не менее важно и сейчас мы этому научимся.

Как вы должны помнить из прошлого урока, в PHP, в зависимости от оператора, операнды приводятся к определённому типу. Для операторов условий в PHP действуют те же правила, и здесь операнд всегда приводится к булевому значению. В случае, если это значение true, то считаем, что условие выполнено, а в случае, если false – то условие не выполнено. В зависимости от того, выполнено ли условие, мы можем делать или не делать какие-либо действия. И тут я предлагаю рассмотреть первый условный оператор – if.

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

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

<?php

if (условие) {
    код, который нужно выполнить, если условие выполнено;
}

А в реальной жизни использование оператора if выглядит следующим образом:

<?php

if (true) {
    echo 'Условие выполнено';
}

Здесь мы явно передали оператору значение true. Разумеется, это абсолютно бессмысленно. Давайте с помощью условия будем определять числа больше 10. Это довольно просто:

<?php

$x = 15;

if ($x > 10) {
    echo 'Число больше 10';
}

И после запуска мы увидим результат:

Число больше 10

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

А можно ли сделать так, чтобы, когда условие не выполнилось, выполнился другой код? Конечно можно! Для этого вместе с оператором if используют оператор else (по-русски - иначе). Он пишется после фигурных скобок, в которые заключается код, выполняющийся при выполненном условии. И выглядит конструкция следующим образом:

<?php

$x = 15;

if ($x > 10) {
    echo 'Число больше 10';
} else {
    echo 'Число меньше либо равно 10';
}

Здесь опять же на экран будет выведено сообщение:

Число больше 10

Однако если мы изменим входные данные, и переменной $x в самом начале присвоим значение 8, то выведется сообщение:

Число меньше либо равно 10

Попробуйте сделать это прямо сейчас.

Конструкция if-elseif-else: несколько условий

В случае, если вам нужно проверить несколько условий, после оператора if добавляется ещё и оператор elseif. Он проверит условие, только если не выполнится первое условие. Например:

<?php

$x = 10;

if ($x > 10) {
    echo 'Число больше 10';
} elseif ($x == 10) {
    echo 'Число равно 10';
}

В данном случае, на экран будет выведено:

Число равно 10

И да, после этого оператора можно добавить else. Код внутри него будет выполнен, если не выполнилось ни одно из условий:

<?php

$x = 9;

if ($x > 10) {
    echo 'Число больше 10';
} elseif ($x == 10) {
    echo 'Число равно 10';
} else {
    echo 'Число меньше 10';
}

Результат этого кода, я полагаю, объяснять не нужно. Да, кстати, возможен целый список из elseif-ов. Например, такой:

<?php

$x = 3;

if ($x <= 0) {
    echo 'Число меньше либо равно 0';
} elseif ($x == 1) {
    echo 'Число равно 1';
} elseif ($x == 2) {
    echo 'Число равно 2';
} else {
    echo 'Число не подошло ни под одно из условий';
}

Приведение к boolean

Помните, в уроке про типы данных в PHP мы с вами научились явно приводить значения к какому-либо типу. Например:

<?php

$x = (boolean)3;

var_dump($x);

Результатом будет true.
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:

<?php

if (3) {
    echo 'Условие выполнено';
}

Выполнится успешно, так как число 3 будет преобразовано к true. К false будут приводиться следующие значения:

  • '' (пустая строка)
  • 0 (число 0)

Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в true и условие выполнится. Исключение – строка, состоящая из одного нуля:

'0'

Она также будет преобразована к false.

Я затронул эту тему с приведением к boolean в домашнем задании к этому уроку. Обязательно его выполните. А сейчас давайте перейдём к следующему условному оператору.

Оператор switch

Помимо конструкции if-else есть ещё один оператор условия. Это – switch. Это очень интересный оператор, требующий запоминания нескольких правил. Давайте для начала посмотрим, как он выглядит на следующем примере:

<?php

$x = 1;

switch ($x) {
    case 1:
        echo 'Число равно 1';
        break;
    case 2:
        echo 'Число равно 2';
        break;
    default:
        echo 'Число не равно ни 1, ни 2';
}

Сначала может показаться, что этот оператор довольно сложный. Однако, если разобраться, то всё становится понятно. В операнде switch указывается некоторое выражение. В нашем случае, это переменная $x, а точнее её значение - 1.

В фигурных скобках мы перечисляем операторы case, после которых указываем значение, с которым сравнивается значение операнда switch. Сравнение происходит нестрогое, то есть как будто используем оператор ==. И если условие выполнилось, то выполняется код, указанный после двоеточия. Если же ни одно из условий не выполнилось, то выполняется код из секции default, которой в общем-то может и не быть, и тогда ничего выполняться не будет. Обратите внимание, внутри каждой секции case, в конце мы прописали оператор break. Это делается для того, чтобы после выполнения кода в случае выполнения условия не продолжилась проверка условий. То есть, если бы не было break в конце секции case 1, то после того, как вывелся бы текст

Число равно 1

продолжило бы выполняться условие сравнения с 2, а затем бы выполнился и код в секции default. Не забывайте писать break!

Сравнение switch с if

Вообще, этот код можно было бы записать и с помощью конструкции if-elseif-else:

<?php

$x = 1;

if ($x == 1) {
    echo 'Число равно 1';
} elseif ($x == 2) {
    echo 'Число равно 2';
} else {
    echo 'Число не равно ни 1, ни 2';
}

Но в виде конструкции switch-case код в конкретно этом случае выглядит проще. И вот почему:

  1. мы сразу видим, что конкретно мы сравниваем (переменную $x) и понимаем, что сравниваем в каждом условии именно это значение, а не какое-либо ещё;
  2. глазу удобнее воспринимать то, с чем сравниваем – секции case 1, case 2 визуально воспринимаются легче, сравниваемое значение заметнее.

И снова про switch

И я ещё не всё сказал про switch - можно писать несколько case-ов подряд, тогда код выполнится при условии, что выполнен хотя бы один из них. Например:

<?php

$x = 2;

switch ($x) {
    case 1:
    case 2:
        echo 'Число равно 1 или 2';
        break;
    case 5:
        echo 'Число равно 5';
        break;
    default:
        echo 'Число не равно ни 1, ни 2, ни 5';
}

Согласитесь, это может быть удобно.

Хорошо, давайте пройдёмся по особенностям оператора switch, о которых нужно помнить всегда.

  1. break прерывает набор условий, не забывайте указывать его;
  2. секция default будет выполнена, если не выполнилось ни одно из условий. Она может и вовсе отсутствовать;
  3. несколько case-ов могуть быть записаны подряд, тогда код в секции выполнится при выполнении хотя бы одного из условий.

Немного практики

Ну что, запомнили операторы условий? Давайте закрепим на практике более реальными примерами.

Чётное или нечётное

Вот один из примеров – нужно определить, чётное ли число или нет. Для этого нам нужно проверить, что остаток от деления на 2 будет равен 0. Подробнее об операторах читайте тут. Давайте сделаем это:

<?php

$x = 2;

if ($x % 2 == 0) {
    echo 'Число чётное';
} else {
    echo 'Число нечётное';
}

Попробуйте самостоятельно изменить значение переменной $x. Круто, да? Оно работает!

Модуль

Давайте теперь научимся вычислять модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс.

<?php

$x = -2;

if ($x >= 0) {
    echo 'Модуль числа: ' . $x;
} else {
    echo 'Модуль числа: ' . -$x;
}

Результат:

Модуль числа: 2

Как мы видим, всё успешно отработало.

Тернарный оператор

Помимо этого, в PHP есть ещё один оператор, который представляет собой сокращённую форму конструкции if-else. Это тернарный оператор. При этом он возвращает разные результаты, в зависимости от того, выполнено ли условие или нет. В общем виде его использование выглядит следующим образом:

условие ? результат_если_true : результат_если_false

Или на примере того же нахождения модуля:

<?php

$x = -2;

$mod = $x >= 0 ? $x : -$x;

echo 'Модуль: ' . $mod;

Результат:

Модуль: 2

Круто, да? Тернарный оператор – очень элегантно вписывается при решении таких вот простеньких задачек.

И ещё немного практики

Условия можно помещать внутрь друг друга и вообще, чего с ними только можно не делать. Например:

<?php

$x = 105;

if ($x > 0) {
    if ($x >= 100) {
        echo 'Число больше либо равно 100';
    } else {
        echo 'Число больше 0 но меньше 100';
    }
} else {
    echo 'Число меньше либо равно 0';
}

Итог

Друзья, надеюсь вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – все быстренько делаем домашнее задание, там ещё больше интересных примеров с условиями. Всем пока!

loader
05.06.2017 в 17:34
92620
+7264
Домашнее задание

Попробуйте следующие условия:

  • if ('string') {echo 'Условие выполнилось';}
  • if (0) {echo 'Условие выполнилось';}
  • if (null) {echo 'Условие выполнилось';}
  • if (5) {echo 'Условие выполнилось';}

Объясните результат.

С помощью тернарного оператора определите, является ли число чётным или нечётным и выведите результат.

Комментарии
Этот урок набрал набрал достаточно большое количество комментариев и дальнейшее его комментирование отключено. Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку, посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали. Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Логические задачи с собеседований