тройные операторы в php?

Возможные дубликаты:
Ссылка. Что означает этот символ в 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? Слишком молод! [какой-то шум].