Если «автомобиль» или «феррари» в качестве ввода, он должен печатать «автомобиль или феррари». Как я могу это достичь?
<?php $car ='333'; switch($car) { case car OR ferrari: print("car or ferrari"); break; case cat: print("cat"); break; default: print("default"); break; } ?>
Используйте два case
:
case 'car': case 'ferrari': print("car or ferrari"); break;
Объяснение :
Важно понять, как выполняется оператор
switch
, чтобы избежать ошибок. Операторswitch
выполняет строку за строкой (фактически, оператор-оператор). В начале код не выполняется. Только когда операторcase
найден со значением, которое соответствует значению выраженияswitch
, PHP начинает выполнять инструкции. PHP продолжает выполнять инструкции до конца блокаswitch
или в первый раз, когда видит операторbreak
. Если вы не напишете операторbreak
в конце списка операторов case, PHP продолжит выполнение утверждений следующего случая.
Вы можете просто «провалить» дела, которые хотите обрабатывать одинаково:
<?php $auto ='333'; switch($auto) { case car: case ferrari: print("car or ferrari"); break; case kissa: print("cat"); break; default: print("default"); break; }
по<?php $auto ='333'; switch($auto) { case car: case ferrari: print("car or ferrari"); break; case kissa: print("cat"); break; default: print("default"); break; }
switch($car) { case car: case ferrari: print("car or ferrari"); break; case cat: print("cat"); break; default: print("default"); break; }
поswitch($car) { case car: case ferrari: print("car or ferrari"); break; case cat: print("cat"); break; default: print("default"); break; }
Случаи «проваливаются» до первого заявления о break
. Это также означает, что вам не нужен break
в случае по default
.
switch($car) { case 'car': case 'ferrari': print("car or ferrari"); break; case 'cat': print("cat"); break; default: print("default"); break; }
поswitch($car) { case 'car': case 'ferrari': print("car or ferrari"); break; case 'cat': print("cat"); break; default: print("default"); break; }
Это использует свойство «fall-through» оператора switch()
. В принципе, раздел не останавливается в case
, он останавливается при break
(или другой операции, которая выходит из функции).
Я взял на себя смелость применить отступ, который я предпочитаю для коммутаторов, что делает их использование только одного уровня отступа, который я считаю уместным, потому что логически switch
и его cases
– все элементы одной и той же конструкции. Поэтому использование двух уровней отступа в switch
дает никакой полезной информации.
Я не знаю, поддерживает ли PHP это, но на C, вы можете сделать что-то вроде этого:
case car: case ferrari: print("car or ferrari"); break;
Идея состоит в том, что код для обработки корпуса автомобиля будет продолжать работать до тех пор, пока он не ударит в оператор break. Что касается стиля, его следует избегать.