Троичные операторы в php?

Возможные дубликаты:
Справка - Что означает этот символ в PHP?
В тройной или нет в тройной?

Может кто-нибудь объяснить, пожалуйста, преимущества / недостатки или использование троичного оператора вместо оператора if/else. Где и когда я должен использовать каждый?

5 ответов

Решение

Тернарные операторы более лаконичны (что хорошо для возможности записи), чем операторы 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? Если вы ответили "а", вы ошибаетесь! Из интерактивной подсказки 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? Слишком молод! [какой-то шум].

Другие вопросы по тегам