Странное поведение оператора switch - PullRequest
0 голосов
/ 18 ноября 2011

Может кто-нибудь показать мне, почему этот оператор switch не выводит то же самое, что оператор if?И что более важно, как заставить их выводить одинаково?

Переключатель

switch ($list_day) { 
        case $today : 
            $calender .= '<td class="today">';
        default : 
            $calender .= '<td>';
    }

Если

if ($list_day == $today) {
        $calendar.= '<td class="today">';
    } else {
        $calendar.= '<td>';
    }

Ответы [ 3 ]

4 голосов
/ 18 ноября 2011

Вам не хватает ваших break заявлений:

switch ($list_day) { 
        case $today : 
            $calender .= '<td class="today">';
            break;
        default : 
            $calender .= '<td>';
    }

Если вы не вышли из режима выполнения оператора switch, просто продолжите работу со следующей меткой. Это позволяет вам связывать этикетки вместе:

switch($number) {
case 1: case 2: case 3:
  echo '1 - 3';
  break;
case 4:
  echo '4';
  break;
default
  echo 'any other number';
}
1 голос
/ 18 ноября 2011

У вас есть опечатка:

switch ($list_day) { 
    case $today : 
        $calendar .= '<td class="today">';
        break;
    default : 
        $calendar .= '<td>';
}

Как и ранее предоставленный перерыв, вы набрали $ calender вместо $ calendar ...

1 голос
/ 18 ноября 2011

Вы забыли свой BREAK;

В коде стиля Pascal, таком как паскаль, visual basic, вам не нужно ломать голову в каждом случае. Но в C-Style / Java / PHP / etc вам нужно:

switch ($list_day) { 
    case $today : 
        $calender .= '<td class="today">';
        break;
    default : 
        $calender .= '<td>';
}

Это можно использовать, чтобы сделать некоторые причудливые вещи, которые я позволю вам выяснить самостоятельно!

...