#php #switch-statement
#php #switch-statement
Вопрос:
Я довольно привык к vb.net Select Case
синтаксис, который по сути является оператором switch, где вы можете делать что-то вроде Case Is > 5
, и если он совпадает, он выполнит этот случай.
Как я могу сделать то, что я собираюсь назвать «операторами условного переключения», поскольку я не знаю фактического имени в PHP?
Или, какой быстрый способ справиться с этим?
switch($test)
{
case < 0.1:
// do stuff
break;
}
Это то, что я пробовал в настоящее время.
Комментарии:
1. Вам придется использовать
if-elseif-else
. PHP не поддерживает этот синтаксис.2. Для случаев допускаются только скалярные значения.
Ответ №1:
Я думаю, вы ищете что-то подобное (это не совсем то, что вы хотите, или, по крайней мере, я понимаю, что вам нужно).
switch (true)
находит случаи, которые оцениваются до истинного значения, и выполняет код внутри до первого разрыва; он сталкивается.
<?php
switch (true) {
case ($totaltime <= 1):
echo "That was fast!";
break;
case ($totaltime <= 5):
echo "Not fast!";
break;
case ($totaltime <= 10):
echo "That's slooooow";
break;
}
?>
Комментарии:
1. @BoltClock: Что делает true?
2. И могу ли я безопасно использовать здесь числа с плавающей запятой в логических выражениях?
3. @Cyclone Да, вы тоже можете использовать float .
4. @Cyclone супер старый, но
true
в коммутаторе указывает коммутатору всегда выполняться. Это похоже наwhile (true) {...}
5. На самом деле это не отличается от обычного оператора switch.
true
это просто значение, точно так же, как переменная содержит значение. Переключатель просто проверяет регистры, чтобы найти первый, который имеет то же самое указанное значение.
Ответ №2:
Я попытался добавить это в качестве комментария к ответу BoltCock, но SO сообщает мне, что его ответ заблокирован, поэтому я сделаю это отдельным (и, по сути, избыточным) ответом:
Ответ «switch (true)» от BoltCock очень похож на следующий пример, который, хотя и логически эквивалентен if else if else, возможно, более красив, потому что условные выражения выровнены по вертикали и являются стандартной / принятой практикой в PHP.
Но синтаксис if else, if else, по сути, универсален для всех языков сценариев и, следовательно, сразу же читается (и поддерживается) кем угодно, что также дает ему мое одобрение.
Ответ №3:
В PHP 8.0 есть дополнительный способ добиться этого, используя оператор match .
Если у вас есть одно выражение в каждом случае, оно эквивалентно следующему оператору match . Обратите внимание, что в отличие от операторов switch, мы можем выбрать возврат переменной (в этом коде я сохраняю результат $result
).
$test = 0.05;
$result = match (true) {
$test < 0.1 => "I'm less than 0.1",
$test < 0.01 => "I'm less than 0.01",
default => "default",
};
var_dump($result);
Операторы сопоставления позволяют использовать только одно выражение после каждого условия. Вы можете обойти это ограничение, вызвав функцию.
function tinyCase(){}
function veryTinyCase(){}
function defaultCase(){}
$test = 0.01;
match (true) {
$test < 0.1 => tinyCase(),
$test < 0.01 => veryTinyCase(),
default => defaultCase(),
};
И для справки, если вы просто хотите проверить равенство, вы можете сделать:
$result = match ($test) { // This example shows doing something other than match(true)
0.1 => "I'm equal to 0.1",
0.01 => "I'm equal to 0.01",
default => "default",
};
Операторы сопоставления имеют некоторые ключевые отличия от операторов переключения, на которые вам нужно обратить внимание:
- В моем последнем примере будет использоваться строгая проверка на равенство
===
вместо==
произвольной . - Если вариант по умолчанию не указан, выдается ошибка UnhandledMatchError, когда ничего не совпадает.
- И не нужно беспокоиться о том, что вы перейдете к следующему делу, если забудете добавить
break
.
Ответ №4:
PHP поддерживает операторы переключения. Это то, что вы хотели?
Комментарии:
1. Нет, я знаю обычные секунды переключения.
Ответ №5:
Оператор переключения с условиями
switch(true)
{
case ($car == "Audi" || $car == "Mercedes"):
echo "German cars are amazing";
break;
case ($car == "Jaguar"):
echo "Jaguar is the best";
break;
default:
echo "$car is Ok";
}