Основываясь на примерах с этой страницы , у меня есть рабочие и нерабочие образцы кода ниже.
Рабочий код с использованием if
оператора:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Нерабочий код с использованием тернарного оператора:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
ОБНОВЛЕНИЕ
После подсказки Брайана я обнаружил, что эхо $test
дает ожидаемый результат. Следующее работает как шарм!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Ответы:
The
синтаксис не является сокращенным оператором if (
?
называется условным оператором), потому что вы не можете выполнить код таким же образом, как если бы вы это сделали:В вашем примере вы выполняете
echo
инструкцию, когда$address
не пусто. Вы не можете сделать то же самое с условным оператором. Однако то, что вы можете сделать, являетсяecho
результатом условного оператора:и это отобразит "Улица пуста!" если он пуст, в противном случае будет отображаться адрес street2.
источник
condition ?: false
который оценивается,condition
если это правда?PHP 7+
Начиная с PHP 7, эту задачу можно выполнить, просто используя оператор объединения Null, например:
echo !empty($address['street2']) ?? 'Empty';
источник
$address['street2']
это пустая строка. Он примет это и не вернется'Empty'
.isset() != empty()
, Это будет работать, только если значениеnull
$address['street2']
не пусто?echo $address['street2'] ?? 'Empty';
однако, как уже упоминалось, это « оператор объединения с нулевым значением », поэтому он проверяет только значение NULL, а не пустой. Это потому что ?? Фактически является сокращением для isset ().Основное истинное / ложное объявление
Условное приветственное сообщение
Сообщение с условными элементами
ссылка: https://davidwalsh.name/php-ternary-examples
источник
)
Неуместен. Он должен предшествовать?
. Полная выписка должна быть$is_admin = ($user['permissions'] == 'admin') ? true : false;
Тернарный оператор - это просто сокращение для блока if / else. В вашем рабочем коде нет условия else, поэтому он не подходит для этого.
Следующий пример будет работать:
источник
Вы ищете тернарный оператор, он же оператор Элвиса (google it: P).
Он возвращает значение переменной или значение по умолчанию, если переменная пуста.
источник
Обратите внимание, что при использовании вложенных условных операторов вы можете использовать круглые скобки, чтобы избежать возможных проблем!
Похоже, PHP работает не так, как хотя бы Javascript или C #.
Один и тот же код в Javascript и C # в обоих случаях возвращает «Исключительно».
Во втором случае PHP делает (или, по крайней мере, то, что я понимаю):
$score > 10
? да$age > 10
? нет, поэтому текущий$age > 10 ? 'Average' : 'Exceptional'
возвращает "Исключительно"'Exceptional' ? 'Horrible' : 'Average'
который возвращает «Ужасно», поскольку «Исключительно» истинноИз документации: http://php.net/manual/en/language.operators.comparison.php
источник
Быстрый и короткий путь:
Вот несколько интересных примеров с одним или несколькими различными условиями.
источник
Условное приветственное сообщение
Вложенная стенография PHP
источник
Вы можете сделать это еще короче, заменив
echo
на<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Это полезно, особенно когда вы хотите определить внутри навигационной панели, должен ли пункт меню отображаться как уже посещенный (нажатый) или нет:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
источник
Я думаю, вы неправильно использовали скобки. Попробуй это:
Думаю, должно работать, также можно использовать:
источник
Я думаю, вам, вероятно, не следует использовать тернарный оператор в php. Рассмотрим следующий пример:
Как вы думаете, какая
$a
переменная будет содержать? (подсказка: дос) И он останется прежним, даже если$foo
переменной будет присвоено значение 2.Чтобы все было лучше, вы должны либо отказаться от использования этого оператора, либо заключить правую часть в фигурные скобки следующим образом:
источник
Тернарный оператор - это в основном сокращение для оператора if / else. Мы можем использовать его, чтобы сократить количество строк кода и повысить удобочитаемость.
Мне ваш код кажется чище. Но мы можем добавить более чистый способ следующим образом:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
По-другому-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Примечание. Я добавил скобки ко всему выражению, чтобы оно было чище. Обычно я делал это для повышения читабельности. С PHP7 мы можем использовать Null Coalescing Operator / php 7 ?? оператор для лучшего подхода. Но вашим требованиям это не подходит.
источник
Также есть сокращенный тернарный оператор, который выглядит так:
(выражение1)?: выражение2 вернет выражение1, если оно оценивается как истина или выражение2 противном случае.
Пример:
вернется
Из руководства по PHP
источник