簡體   English   中英

PHP 中的條件 switch 語句

[英]Conditional switch statements in PHP

我非常習慣 vb.net 的Select Case語法,它本質上是一個 switch 語句,您可以在其中執行Case Is > 5之類的操作,如果匹配,它將執行該 case。

由於我不知道 PHP 中的實際名稱,我該如何做我將稱之為“條件切換語句”的事情?

或者,什么是管理它的快速方法?

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

這就是我目前嘗試過的。

我認為你正在尋找這樣的東西(這不完全是你想要的,或者至少我理解的是你的需要)。

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

?>

PHP 支持switch 語句 那是你想要的嗎?

我試圖將其添加為 BoltCock 答案的評論,但 SO 告訴我他的答案已被鎖定,因此我將其作為一個單獨的(並且基本上是多余的)答案:

BoltCock 的“switch(true)”答案很像下面的例子,雖然邏輯上等價於 if + else if + else 可以說更漂亮,因為條件表達式是垂直對齊的,並且是 PHP 中的標准/接受的做法。

但是 if + else if + else 語法本質上是跨腳本語言通用的,因此任何人都可以立即閱讀(和維護),這也讓我點頭。

您可以在 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 ,也不必擔心會遇到下一個案例。

帶條件的 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";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM