- PHP занятие 3. Условные операторы
- Условные операторы php
- PHP оператор if
- Логические операции в условии
- Операции сравнения и правило лжи
- Логические конструкции И ИЛИ и НЕ в условном операторе
- Тернарный оператор PHP
- Порядок выполнения тернарного оператора
- А какая вообще разница?
- Как избежать ошибки?
- Почему оно вообще так происходит?
- Тернарный оператор, switch и Элвис? — PHP: Основы
- Тернарный оператор
- Конструкция Switch
- Оператор Элвис
- Использование тернарного оператора без оператора Else Переполнение стека
- Решение
- Другие решения
- Урок 5. Условный оператор if, логические операции и сравнение в PHP
- Условный оператор if в PHP
- Операторы сравнения в PHP
- Логические операторы PHP
- Тернарный оператор
PHP занятие 3. Условные операторы
Условные операторы php
Условные операторы php представлены тремя основными конструкциями:
Рассмотрим подробнее каждый из них.
PHP оператор if
Рис 3.1. Условный оператор IF, укороченный вариант
Рис. 3.2. Синтаксис условного оператора IF ELSE
Рис. 3.3. Полный синтаксис условного оператора IF elseif
В условном операторе может использоваться двоеточие : вместо фигурных скобок. В таком случае заканчивается оператор служебным словом endif
Рис. 3.4. Условный оператор If и Endif в php
Пример:
Логические операции в условии
В условии if в скобках могут присутствовать следующие операции:
== | равенство |
!= | неравенство |
> | больше |
меньше | |
>= | больше или равно |
меньше или равно |
Решение:
1 Решение:
2 Решение:
Операции сравнения и правило лжи
В конструкции if в скобках должно находиться логическое выражение или переменная, которые рассматриваются с точки зрения алгебры логики, возвращающая значения либо true либо false
Т.е. в качестве условия может выступать единственная переменная. Рассмотрим пример:
В примере транслятор языка php будет рассматривать переменную в скобках на правило лжи:
Правило ЛЖИ или что считается ложным:
Логические конструкции И ИЛИ и НЕ в условном операторе
$a=1; if (!($a Оператор Switch PHP
Рис. 3.5. Условный оператор Switch
Решение:
Дополните код:
Тернарный оператор PHP
Порядок выполнения тернарного оператора
В php есть интересная особенность тернарного оператора — специфический и уникальный порядок выполнения.
Java и C++ тоже вернут 1
А какая вообще разница?
Я знаю об этом интересном нюансе довольно давно, но буквально вчера обнаружил ошибку в одном из открытых исходников: автор явно не знал об этом нюансе и попался. Потому, данная статья служит всего-лишь предупреждением. Ведь, если программист ожидает от php такого же поведения, как от других языков — может попасть в халепу.
Такой приём очень удобный для задания значений, зависимо от условий. Изящная замена if-else. Например:
Как избежать ошибки?
Первый способ — не использовать тернарный оператор в php.
Второй — прямо указывать порядок выполнения с помощью скобок:
Чем-то напоминает Лисп, не так ли?
Почему оно вообще так происходит?
Давайте разберемся в порядке выполнения тернарного оператора на примере JavaScript vs PHP
Напишем два тестовых скрипта, чтобы понять, как работает каждый из языков.
$ node ternary.js
cond.first
value.first
result: first
$ php ternary.php
cond.first
value.first
value.second
value.third
result: third
Какой из этого результата можно сделать вывод. Javascript разбирает тернарный оператор вполне логично. Сначала проверяет самое левое условие. Если оно верно, то выполняет и возвращает левую часть после первого двоеточия, если не верно, то правую.
Тернарный оператор, switch и Элвис? — PHP: Основы
Тернарный оператор
Посмотрите на определение функции, которая возвращает модуль переданного числа:
В PHP существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор. Тернарный оператор — единственный в своем роде оператор, требующий три операнда:
Общий паттерн выглядит так:
Если вы помните, в чём сила выражений, то вероятно уже догадались, что тернарный оператор можно вкладывать в тернарный оператор. Не делайте этого 🙂 Такой код тяжело и читать, и отлаживать, это очень плохая практика.
Конструкция Switch
Многие языки в дополнение к условной конструкции if включают в себя switch. Это специализированная версия if, созданная для некоторых особых ситуаций. Например, её имеет смысл использовать там, где есть цепочка if else с проверками на равенство. Например:
Свитч довольно сложная конструкция с точки зрения количества элементов из которых она состоит:
Иногда результат полученный внутри case это конец выполнения функции содержащей switch. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.
Первый. Создать переменную перед switch, заполнить ее в case и затем, вконце, вернуть значение этой переменной наружу.
Второй способ проще и короче. Вместо создания переменной, case позволяет внутри себя делать обычный возврат из функции. А так как после return никакой код не выполняется, то мы можем избавиться от break :
Switch хоть и встречается в коде, но технически всегда можно обойтись без него. Ключевая польза при его использовании в том, что он лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. Хотя кода и стало, физически, чуть больше, читать его легче в отличие от блоков elseif.
Оператор Элвис
Вообразим задачу: на сайте у пользователей могут быть имена и псевдонимы. Имя не обязательно, но если оно есть, то нужно обращаться к человеку по имени, а если нет, то по псевдониму. Попробуем собрать строку с приветствием человека по этим требованиям:
?: — бинарный оператор, который возвращает первый операнд если он истинен, и второй в ином случае.
Использование тернарного оператора без оператора Else Переполнение стека
Можете ли вы использовать тернарный оператор в PHP без закрывающего оператора else? Я пробовал, и он возвращает ошибки. Поиск в Google ничего не дает, поэтому я думаю, что ответ, вероятно, нет. Я просто хотел перепроверить здесь. Например:
и он вернул ошибки. Я тоже пробовал
и это также вернуло ошибки. Есть ли способ использовать тернарный оператор без прилагаемого оператора else, или я застрял, написав его от руки?
РЕДАКТИРОВАТЬ: Следуя совету Rizier123, я попытался установить для части ‘else’ уравнения значение NULL, но он все равно заканчивается добавлением ключа в массив. Ценности нет, но ключ в том, что портит мои планы. Пожалуйста, позвольте мне объяснить дальше.
Но, очевидно, MaybeSet получает значение NULL, потому что (isset ($ testing) идет после (isset ($ yes_this_test)) и возвращает
Теперь я знаю, что могу сделать что-то вроде
Но я надеялся, что для этого типа логики есть сокращение, поскольку я должен написать десятки из них. Существует ли оператор, аналогичный тернарному оператору, для операторов if / elseif?
Решение
Начиная с PHP 5.3 вы можете сделать это:
Как вы можете видеть, он использует только часть, если условие ложный, так что вы должны отрицать isset выражение.
ОБНОВИТЬ
Начиная с PHP 7.0 вы можете сделать это:
Как видите, он возвращает свой первый операнд, если он существует и не равен NULL; в противном случае он возвращает свой второй операнд.
Другие решения
Просто установите его NULL как это:
Переменная you вернет false с isset() проверять.
Вы можете прочитать больше о NULL в руководстве.
Специальный Значение NULL представляет переменную без значения. NULL — единственно возможное значение типа null.
Переменная считается null если:
Вы также можете сделать это (краткая форма):
Урок 5. Условный оператор if, логические операции и сравнение в PHP
Условный оператор if в PHP
Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.
Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.
Демонстрация Скачать исходники
Наш школьник, который успевает и отдохнуть, и написать нормально тест получает оценку 4! А принцип работы надеюсь понятен.
Возможна и короткая запись работы условной операции, когда Вам нужно действие только в случае соблюдения условия.
Вполне себе милый пример короткой записи условной операции. else писать не обязательно.
Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?
Операторы сравнения в PHP
Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.
Теперь рассмотрим операторы на примерах:
Логические операторы PHP
Бывают случаи, когда нужно сравнить не одну переменную, а сразу две и более в одном условии. Для этого существуют логические операторы.
Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.
Переходим к примерам
Тернарный оператор
К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.
Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.
Прочитайте комментарии к коду и всё должно быть понятно.