php стенограмма - PullRequest
       27

php стенограмма

1 голос
/ 03 апреля 2011

У меня есть это:

$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';

Однако это не так.Если $status не 3 - он все равно возвращает 'delete'

Что не так?Должен ли я использовать else if вместо сокращения для этого?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 03 апреля 2011

Что вы пытаетесь получить за свой результат?Я предполагаю, что вы хотите:

  1. читать
  2. непрочитано
  3. удалить
  4. непрочитано

    $ color =($ status == 1)?'read': ($ status == 3)?'delete': 'unread'

(что по какой-то причине не показывает разрывы строк)

Однако для удобства чтения я бы использовал либо if/else или switch:

switch ($status) {
    case 1: $color = 'read'; break;
    case 3: $color = 'delete'; break;
    default: $color = 'unread';
}

Как правило, я не использую форму «?:», Пока не получу ОГРОМНОЕ улучшение;обычно лучше читаемость - лучше.

3 голосов
/ 03 апреля 2011

1) ||не на 100% равно OR, например &&, не на 100% равно AND2) Используйте скобки

PS: да, используйте «если .. еще» - это повысит читабельность кода.

1 голос
/ 03 апреля 2011

Тернарный оператор имеет дурацкую привязку.

И вместо этого вы можете использовать карту:

$map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");

$color = $map[ min(3,$status) ];   // min is actually the max value here
1 голос
/ 03 апреля 2011

Я бы сказал, что не делайте это как стенографию - рукописный текст будет легче читать, как для вас через три дня, когда вы забыли, что вы делали, или когда придет кто-то другой.

0 голосов
/ 03 апреля 2011

Исправлено с круглыми скобками благодаря Chvanikoff.

$color = ($status == 1 || $status == 2) ? 'read' : ('unread' || $status == 3 ? 'delete' : '');
...