Ответ 1
Совершенно допустимо оставить break
, когда вы return
от switch
.
Но довольно распространенная практика заключается в том, чтобы добавить явный break
к каждому case
в качестве
мы пытаемся внедрить новые правила стиля кодирования для нашей команды, php codesniffer печатает предупреждение о операторах операторов switch, когда "break" не найден как:
switch ($foo) {
case 1:
return 1;
case 2:
return 2;
default:
return 3;
}
Есть ли веская причина для использования:
switch ($foo) {
case 1:
return 1;
break;
}
?? разрыв никогда не достигается?
Совершенно допустимо оставить break
, когда вы return
от switch
.
Но довольно распространенная практика заключается в том, чтобы добавить явный break
к каждому case
в качестве
У меня есть гораздо лучшее решение. Пожалуйста, следуйте приведенному ниже коду для вышеуказанного состояния:
$result = 3; // for default case
switch ($foo) {
case 1:
$result = 1;
break;
case 2:
$result = 2;
break;
default:
// do nothing
}
return $result;
Это не приведет к какой-либо ошибке, и код также отлично подходит для понятий.
Если ваш "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"
Это просто и лучше. Меньше строки = > меньше кода для поддержки: -)
Я не специалист по совершенному кодированию, но я думаю, что валидатор предпочел бы что-то вроде этого
switch ($foo) {
case 1:
$ret = 1;
break;
case 2:
$ret = 2;
break;
default:
$ret = 3
}
return $ret
Я думаю, что использование выражения return in case для разрыва потока кода на самом деле не является лучшей практикой. Итак, почему валидатор говорит, что нет перерыва...
По вашему вопросу о категории, я не знаю... извините
Из руководства 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 (даже если вы, возможно, захотите избежать их назначения в определенных обстоятельствах).