05.06.2017   2844
Условия в PHP: операторы if, else, switch, тернарный оператор

Условия в PHP

Всем привет! Вот и очередной урок по 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';
}

Итог

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

Домашнее задание
Для просмотра нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности

КОММЕНТАРИИ

 Serega 2017-07-04 11:57:36
0

Привет, Такой вопрос по домашке, Через оператор if определяю число четное и нечетное, а вот через тернарный оператор ни как не получается.)

Ответить
 kizil.vitali@gmail.com 2017-08-07 21:50:22
0

Привет, хочу водить числа не в код, а в браузере и использовать их, как это лучше сделать?

Ответить
  •  ivashkevich 2017-08-08 01:49:42
    0

    Привет, хорошее желание! Скоро будет урок по этой теме, не забегай вперед.

    Ответить
 Ogurchik 2017-08-09 13:33:42
+1

Привет! В примере про четное-нечетное, если ввести, например, $x = 2.2 (т.е. присвоить не integer, а float), то результат выводится как "четное", хотя это дробное число. Скажи, пожалуйста, почему так происходит и как сделать проверку условия на целочисленное значение?

Ответить
  •  ivashkevich 2017-08-10 17:51:51
    0

    Привет, можно в самом начале сделать вызов функции is_int(число), которая проверит является ли значение целым числом, и вернёт true или false. Документация по функции тут.

    Ответить
    •  Ogurchik 2017-08-11 11:55:59
      0

      Спасибо! Всё получилось)
      Еще 1 вопрос. В последнем примере этого урока, если я не ошибаюсь, правильно будет написать условие if ($x >= 100) , а не if ($x > 100). Посмотрите, пожалуйста.

      Ответить
 phenomg 2017-08-09 13:38:27
0

2) Выполнятся 1 и 4 выражение, так как "string" и 5 переводятся в значение true, в то время как 0 и null (отсутствие значения) преобразуются в значение false.

3)

$a = 5;
$number = $a / 2 == 0 ? "четным" : "нечетным";

echo "Число $a является $number";

Ответить
 Generalisimus 2017-09-02 01:25:37
0

<?php
/*
if ('ball in goal'){
    echo "nice shoot";
}
else {
    echo "bol in out";
}
*/
/*
if (0) {
    echo "true";
}
else {
    echo "false";
}
*/
/*
 if (null) {
    echo"true it`s null";
}
else {
    echo"it is wrong number";
}
*/
/*
if (5) {
    echo "password is correct";
}
else {
    echo  "password is incorrect";
} // в данном случае число 5 явлается числом true
*/
/*
$a=5;
if ($a%2) {
    echo "переменная  нечетная";
} else {
    echo "переменная  четная";
}

Ответить
 serb2017 2017-11-08 17:18:19
0

$x = 7 ;
echo  '<br>', 'число  ', $x ;
$x=$x % 2 == 0 ? '  чётное' : '  нечётное' ;
echo   $x ;

На экране:
число 7 нечётное

Ответить
  •  ivashkevich 2017-11-09 17:36:25
    0

    Хорошо, но есть пара мелких замечаний:

    1. Не стоит переменной $x, в которой лежит число, присваивать строку. Ваша переменная должна быть для чего-то предназначенной, и нельзя в неё записывать что-то постороннее. Назовите итоговую переменную $result, если уж хочется использовать переменную. А вообще - здесь сразу можно писать:
      echo $x % 2 == 0 ? '  чётное' : '  нечётное' ;
    2. Поправьте отступы. У вас местами по 2 пробела в коде. Такого быть не должно. Прочитайте про Reformat Code в PhpStorm.

    Ответить
 WarLikeLaux 2017-11-09 22:53:48
+2

enter image description here

Ответить
Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности