PHP中的条件开关语句


Conditional switch statements in PHP

我很习惯vb.net的Select Case语法,它本质上是一个开关语句,你可以做像Case Is > 5这样的事情,如果它匹配,它将执行这种情况。

我怎么能做我将称为"条件开关语句",因为我不知道实际名称,在PHP?

或者,有什么快速的方法来管理这个?

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

我想你正在寻找这样的东西(这不是你想要的,或者至少我理解的是你的需要)。

switch (true)找到求值为真值的情况,执行其中的代码直到第一次break;它遇到。

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

我试着把这个作为评论添加到BoltCock的答案中,但是SO告诉我他的答案是锁定的,所以我将把这个作为一个单独的(本质上是多余的)答案:

"开关(真正的)";BoltCock的回答很像下面的例子,虽然逻辑上等价于if + else,但if + else可以说更漂亮,因为条件表达式是垂直对齐的,这是PHP的标准/可接受的做法。

但是if + else if + else语法本质上是跨脚本语言通用的,因此任何人都可以立即阅读(和维护),这也给了我点了点头。

在PHP 8.0+中,您还可以通过使用match语句来完成此操作。

如果在每个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,也不用担心掉到下一个case。

PHP支持switch语句。这是你想要的吗?

带条件的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";
}