PHP中的条件switch语句

jpfvwuh4  于 2022-11-28  发布在  PHP
关注(0)|答案(5)|浏览(225)

我非常习惯vb.net的Select Case语法,它本质上是一个switch语句,在这里你可以做Case Is > 5这样的事情,如果它匹配,它就会执行这种情况。
在PHP中,我不知道实际的名称,我怎么才能做我将要称之为“条件开关语句”的事情呢?
或者,有什么快速的方法来管理它?

switch($test)
{
    case < 0.1:
        // do stuff
        break;
}

这就是我目前所尝试的。

2o7dmzc5

2o7dmzc51#

我认为你正在寻找这样的东西(这不是你想要的,或者至少我理解你的需要)。
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;
}

?>
4zcjmb1e

4zcjmb1e2#

我试着把这句话作为注解添加到BoltCock的回答中,但他告诉我他的回答被锁定了,所以我将这句话作为一个单独的(本质上是多余的)回答:
来自BoltCock的“switch(true)”答案很像the following example,尽管它在逻辑上等价于if + else if + else,但可以说它更漂亮,因为条件表达式是垂直对齐的,并且是PHP中的标准/公认实践。
但是if + else if + else语法在脚本语言中基本上是通用的,因此任何人都可以立即读取(和维护),这也让我对它表示赞同。

u3r8eeie

u3r8eeie3#

在PHP 8.0+中,还有一种方法可以实现这一点,那就是使用match statement
如果在每个case中只有一个表达式,它就相当于下面的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);

Match语句只允许在每个条件后有一个表达式。可以通过调用函数来解决此限制。

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",
};

Match语句与switch语句确实有一些关键的不同之处,您需要注意:

  • 我的最后一个示例将使用严格的相等性检查===,而不是宽松的相等性检查==
  • 如果未提供默认大小写,则在没有匹配项时将引发UnhandledMatchError错误。
  • 如果您忘记添加break,也不用担心会陷入下一个案例。
zf2sa74q

zf2sa74q4#

PHP支持switch statements。这是您想要的吗?

6jjcrrmo

6jjcrrmo5#

带条件的Switch语句

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";
}

相关问题