тернарный оператор php без else
Использование тернарного оператора без оператора 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 если:
Вы также можете сделать это (краткая форма):
Порядок выполнения тернарного оператора
В 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 разбирает тернарный оператор вполне логично. Сначала проверяет самое левое условие. Если оно верно, то выполняет и возвращает левую часть после первого двоеточия, если не верно, то правую.
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
Урок 5. Условный оператор if, логические операции и сравнение в PHP
Условный оператор if в PHP
Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.
Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.
Демонстрация Скачать исходники
Наш школьник, который успевает и отдохнуть, и написать нормально тест получает оценку 4! А принцип работы надеюсь понятен.
Возможна и короткая запись работы условной операции, когда Вам нужно действие только в случае соблюдения условия.
Вполне себе милый пример короткой записи условной операции. else писать не обязательно.
Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?
Операторы сравнения в PHP
Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.
Теперь рассмотрим операторы на примерах:
Логические операторы PHP
Бывают случаи, когда нужно сравнить не одну переменную, а сразу две и более в одном условии. Для этого существуют логические операторы.
Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.
Переходим к примерам
Тернарный оператор
К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.
Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.
Прочитайте комментарии к коду и всё должно быть понятно.
If without else ternary operator
(I am using Java programming language.)
10 Answers 10
Why using ternary operator when you have only one choice?
It’s the exact same length.
Ternary if operator is the particular ternary operator. One of a kind.
In mathematics, a ternary operation is an n-ary operation with n = 3.
It means all 3 operands are required for you.
As mentioned in the other answers, you can’t use a ternary operator to do this.
However, if the need strikes you, you can use Java 8 Optional and lambdas to put this kind of logic into a single statement:
A ternary operation is called ternary beacause it takes 3 arguments, if it takes 2 it is a binary operation.
And as noted above, it is an expression returning a value.
If you omit the else you would have an undefined situation where the expression would not return a value.
So as also noted in other answer, you should use an if statement.
You cannot use ternary without else, but to do a «if-without-else» in one line, you can use Java 8 Optional class.
Yes you can do that actually (in JavaScript at least):
or (in JavaScript, and there might be a similar way to do this in Java):
Well in JavaScript you can simply do:
since that’s what’s literally actually happening in a real if statement, the else clause is simply undefined. I image you can do pretty much the same thing in (almost?) any programming language, for the else clause just put a null-type variable that doesn’t return a value, it shouldn’t cause any compile errors.
or just make a function to return if all else fails