Возможные дубликаты:
Ссылка. Что означает этот символ в PHP?
К тройной или не к тройной?
Кто-то может объяснить преимущества / недостатки или использовать тернарный оператор вместо инструкции if / else. Где и когда я должен использовать их?
Тернарные операторы являются более краткими (что хорошо для возможности записи), чем если бы были заявления else, однако вы действительно должны использовать их только тогда, когда вы работаете с одним условием. Вложенные троичные операторы действительно уменьшают читаемость.
В общем, я использую только тройные операторы, когда:
1) Я назначаю переменную, основанную на условии.
а также
2) Существует только одно условие.
В противном случае они становятся беспорядочными, и это затрудняет поддержание.
Пример:
$port = ($secure) ? 443 : 80;
тогда как если бы было иначе:
if($secure){ $port = 443; } else { $port = 80; }
вы могли бы сделать это лучше:
$port = 80; if($secure){ $port = 443; }
Однако вы можете видеть, что использование простого тернарного оператора более кратким (в том смысле, что вы получаете свою идею в меньшем пространстве).
Вы можете утверждать, что это уменьшает читаемость, но лишь незначительно, если таковая имеется. Как я сказал ранее, не сходите с ума от этого оператора, так как он настолько уменьшает удобочитаемость, что его не стоит. Имейте в виду, что работа с языком программирования – это баланс. Это более доступным для записи использование простого тернарного оператора, что является огромным фактором в языках программирования.
Что касается возможности записи и чтения, я хотел бы указать на конкретный пример.
$count++
против
$count = $count + 1 // or $count += 1
Второй пример наиболее читабельен тем, что вы точно знаете, что происходит, однако 9/10 раз вы будете делать $count++
потому что это просто и доступно для записи.
Тернарные операторы работают очень хорошо, когда результат одного условия присваивается переменной. Это может привести к ясной и сжатой картине состояния, приводящего к состоянию переменной, тогда как в выражении if/else
вам нужно посмотреть по крайней мере две строки, чтобы определить результат.
$result = $condition > 5 ? "hello" : "world"; // is clearer & easier to read than if ($condition > 5) { $result = "hello"; } else { $result = "world"; }
Все сосредоточены на том, когда его использовать, но, вероятно, стоит знать, когда не использовать его. Вот пример того, как не использовать тернарный оператор:
$foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c';
Быстро, когда $bar
– 1, что $foo
? Если вы ответили «a», вы ошибаетесь ! Из интерактивной подсказки PHP:
php > $bar = 1; $foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c'; echo $foo; b php > $bar = 2; $foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c'; echo $foo; b
Хлоп! Порядок действий PHP здесь нарушен . Мы должны добавить parens для устранения неоднозначности:
$foo = $bar == 1 ? 'a' : ($bar == 2 ? 'b' : 'c');
Это быстро становится нечитаемым. Если вы хотите использовать оператор, используйте его только для одного условия . Если вам нужна логика if-elseif-else, используйте реальный блок if
.
Оператор if / else может быть громоздким в некоторых ситуациях. Например, сравните следующие два:
$a = (condition ? 1 : 2)
против
if (condition) { $a=1 } else { $a=2 }
Когда использовать: никогда.
PHP отлично подходит для его читаемости.
можно понять целые утверждения, не знающие синтаксиса языка.
Обычное выражение if, подобное этому
if($age < 18) $error = "Too young!";
может быть прочитан как почти простой английский:
Если [данный] возраст меньше 18, ошибка будет «слишком молодой»,
но как бы вы прочитали такую тройную
$error = (($age < 18))? "Too young":"";
?
Ошибка будет возрастом менее 18? Слишком молод! [какой-то шум].