Подтвердить что ты не робот

Версии кода кодирования PHP; в переключателе/​​корпусе

мы пытаемся внедрить новые правила стиля кодирования для нашей команды, php codesniffer печатает предупреждение о операторах операторов switch, когда "break" не найден как:

switch ($foo) {   
    case 1:
      return 1;   
    case 2:
      return 2;   
   default:
       return 3; 
}

Есть ли веская причина для использования:

   switch ($foo) {
       case 1:
         return 1;
         break;
   }

?? разрыв никогда не достигается?

4b9b3361

Ответ 1

Совершенно допустимо оставить break, когда вы return от switch.

Но довольно распространенная практика заключается в том, чтобы добавить явный break к каждому case в качестве

Ответ 2

У меня есть гораздо лучшее решение. Пожалуйста, следуйте приведенному ниже коду для вышеуказанного состояния:

$result = 3; // for default case
switch ($foo) {   
    case 1:
      $result = 1;
      break;  
    case 2:
      $result = 2;
      break;    
   default:
      // do nothing
}
return $result;

Это не приведет к какой-либо ошибке, и код также отлично подходит для понятий.

Ответ 3

Если ваш "php codesniffer печатает предупреждение", попробуйте получить еще один лучший код и не забудьте попытаться использовать последнюю стабильную версию PHP. Вы можете, конечно, написать break после одного return, но это не имеет смысла. Потому что это никогда не будет читаться. Ваш код в порядке.

Посмотрите на это:

$fn = function($ar) {
    switch ($ar) {
        case 1:
            return "uno";
        case 2:
            return "two";
        default:
            return "mehr als zwei";
    }
};
$str = $fn(4); // return "mehr als zwei"

Это просто и лучше. Меньше строки = > меньше кода для поддержки: -)

Ответ 4

Я не специалист по совершенному кодированию, но я думаю, что валидатор предпочел бы что-то вроде этого

switch ($foo) {   
    case 1:
      $ret =  1;   
      break;
    case 2:
      $ret = 2;
      break;   
   default:
       $ret = 3

}
return $ret

Я думаю, что использование выражения return in case для разрыва потока кода на самом деле не является лучшей практикой. Итак, почему валидатор говорит, что нет перерыва...

По вашему вопросу о категории, я не знаю... извините

Ответ 5

Из руководства PHP (http://us3.php.net/manual/en/control-structures.switch.php):

PHP продолжает выполнять инструкции до конца блока коммутатора или в первый раз, когда видит оператор break. Если вы не напишете оператор break в конце списка операторов case, PHP продолжит выполнение утверждений следующего случая. Например:

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>

Здесь, если $i равно 0, PHP выполнит все инструкции эха! Если $i равно 1, PHP будет выполнять последние два выражения echo. Вы получите ожидаемое поведение ('i equals 2' будет отображаться), только если $i равно 2. Таким образом, важно не забывать инструкции break (даже если вы, возможно, захотите избежать их назначения в определенных обстоятельствах).