Троичные операторы в 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? Слишком молод! [какой-то шум].