Основываясь на различных примерах, ниже я могу представить рабочие и нерабочие образцы кода.
Рабочий код с использованием оператора if:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Нерабочий код с использованием тернарного оператора:
$test = (empty($address['street2'])) ? 'Да <br />' : 'Нет <br />';
// Также проверено следующее
(empty($address['street2'])) ? 'Да <br />' : 'Нет <br />';
// Или
echo (empty($storeData['street2'])) ? 'Да <br />' : 'Нет <br />';
Ответ 1
(condition) ? /* значение, которое возвращается, если условие истинно */
: /* значение, которое возвращается, если условие ложно */ ;
синтаксис не является сокращенным оператором if ( «?» называется условным оператором), потому что вы не можете выполнить код таким же образом, как если бы вы сделали это:
if (condition) {
/* условие истинно, сделайте что-то вроде echo */
} else {
/* условие ложно, сделайте что-нибудь еще */
}
В вашем примере вы выполняете инструкцию echo, когда $address не пусто. Вы не можете сделать то же самое с условным оператором. Однако то, что вы можете сделать, является echo результатом условного оператора:
echo empty($address['street2']) ? " Улица2 пуста!" : $address['street2'];
и эта конструкция отобразит «Улица2 пуста!» если она пуста, в противном случае будет отображаться адрес street2.
Ответ 2
Основное истинное/ложное объявление:
$is_admin = ($user['permissions'] == 'admin' ? true : false);
Условное приветственное сообщение:
echo 'Добро пожаловать '.($user['is_logged_in'] ? $user['first_name'] : 'Гость').'!';
Сообщение с условными элементами:
echo 'Ваша корзина содержит '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
Ответ 3
Быстрый и короткий путь:
echo $address['street2'] ? : "Нет";
Вот несколько интересных примеров с одним или несколькими различными условиями:
$color = "blue";
// Условие #1 Показать цвет без указания переменной
echo $color ? : "Undefined";
echo "<br>";
// Условие #2
echo $color ? $color : "Undefined";
echo "<br>";
// Условие #3
echo ($color) ? $color : "Undefined";
echo "<br>";
// Условие #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";
// Условие #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";
// Условие #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";
// Условие #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";
Ответ 4
Обратите внимание, что при использовании вложенных условных операторов вы можете использовать круглые скобки, чтобы избежать возможных проблем!
Похоже, PHP работает не так, как хотя бы код на Javascript или C#.
$score = 15;
$age = 5;
// Следующий код вернет "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));
// А этот код вернет "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');
Один и тот же код в Javascript и C# в обоих случаях возвращает «Exceptional».
Во втором случае PHP делает следующее:
Есть $score > 10? да.
Есть $age > 10? нет, поэтому текущий $age > 10 ? 'Average' : 'Exceptional' возвращает «Exceptional».
Затем, вместо того, чтобы просто останавливать весь оператор и возвращать «Exceptional», он продолжает вычислять следующий оператор.
Становится следующий оператор, 'Exceptional'? 'Horrible': 'Average', который возвращает «Horrible», поскольку «Exceptional» является правдой.
Рекомендуется избегать «складывания» тернарных выражений. Поведение PHP при использовании более чем одного тернарного оператора в одном операторе не очевидно.
Ответ 5
Я думаю, вам, вероятно, не следует использовать тернарный оператор в php. Рассмотрим следующий пример:
<?php
function f1($n) {
var_dump("первая функция");
return $n == 1;
}
function f2($n) {
var_dump("вторая функция");
return $n == 2;
}
$foo = 1;
$a = (f1($foo)) ? "uno" : (f2($foo)) ? "dos" : "tres";
print($a);
Как вы думаете, что переменная $a будет содержать? (подсказка: dos) И она останется такой же, даже если переменной $foo будет присвоено значение 2.
Чтобы было лучше понятно, вы должны либо отказаться от использования этого оператора, либо заключить правую часть в круглые скобки следующим образом:
$a = (f1($foo)) ? "uno" : ((f2($foo)) ? "dos" : "tres");
Ответ 6
Тернарный оператор – это в основном сокращение для оператора if/else. Мы можем использовать его, чтобы сократить количество строк кода и повысить удобочитаемость.
Ваш код мне кажется чище. Но мы можем добавить более чистый способ следующим образом:
$test = (empty($address['street2'])) ? 'Да <br />' : 'Нет <br />';
Другой путь:
$test = ((empty($address['street2'])) ? 'Да <br />' : 'Нет <br />');
Примечание. Я добавил скобки ко всему выражению, чтобы оно было чище. Обычно я делал это для повышения читабельности. С PHP7 мы можем использовать Null Coalescing Operator/php 7 ?? оператор для лучшего подхода. Но для вашего случая это не подходит.

Web