PHP中的条件切换语句

时间:2011-10-18 00:30:47

标签: php switch-statement

我已经习惯了vb.net的Select Case语法,它本质上是一个switch语句,你可以在其中执行Case Is > 5之类的操作,如果它匹配,它将执行该情况。

我怎么能做我将要称之为“条件切换语句”的内容,因为我不知道PHP中的实际名称?

或者,有什么方法可以快速管理?

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

这就是我目前所尝试的。

4 个答案:

答案 0 :(得分:26)

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

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 :(得分:0)

PHP支持switch statements。那是你想要的吗?

答案 2 :(得分:0)

我试图将此作为对BoltCock答案的评论添加,但是SO告诉我他的答案是锁定的,所以我会将其作为一个单独的(并且基本上是多余的)答案:

BoltCock的“switch(true)”答案很像the following example,虽然在逻辑上等同于if + else但是+ else可以说是更漂亮因为条件表达式是垂直对齐的,并且是标准的/接受的用PHP练习。

但if + else if + else语法在脚本语言中基本上是通用的,因此任何人都可以立即读取(并且可维护),这也是我的点头。

答案 3 :(得分:0)

您可以在 PHP 8.0+ 中使用 match statements 完成此操作。

如果你的 switch 语句中有一个表达式,它相当于下面的 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 只允许您在右侧有一个表达式(=> 之后的所有内容)。与多行情况下的 switch 语句等价的是使用单独的函数。

function tinyCase(){}
function veryTinyCase(){}
function defaultCase(){}

$test = 0.01;
match (true) {
    $test < 0.1 => tinyCase(),
    $test < 0.1 => 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,也不必担心会遇到下一个案例。