PHP 8 match 表達式的用法

在 PHP 8 中,導入了新的 match 表達式,用於取代傳統的 switch 語句進行多項條件判斷,雖然 PHP 8 依然保留了 switch 功能,但 match 具有更多的優點,可以算是 switch 的改良版,相較於 switch 的鬆散比較(==),match 採用的是嚴格比較(===),這點也是兩者之間相當大的差別,match 表達式具有以下優點:

  • 語法更加簡潔易讀
  • 支持更強大的模式比對功能
  • 可選返回表達式

以下是 match 表達式的基本語法格式:

match ($expression) {
    Pattern1 => $result1,
    Pattern2 => $result2,
    ...,
    default => $defaultResult,
};

其中:

  • $expression 是要比對的表達式
  • Pattern1、Pattern2 是條件表達式(conditional_expression),可以很多組不同的條件
  • $result1、$result2 是比對成功時要返回的結果,每一組 Pattern 就要對應一組 $result
  • $defaultResult 是在沒有比對成功時要返回的結果

以下是 match 表達式的簡單範例:

$fruit = 'apple';

$result = match ($fruit) {
    'apple' => 'This is an apple',
    'orange' => 'This is an orange',
    'banana' => 'This is a banana',
    default => 'This is an unknown fruit',
};

echo $result; // Output: This is an apple

在這個範例中,$fruit 變數的值是 'apple',因此會比對第一個條件選項,並返回 "This is an apple" 結果。

match 表達式還支援更強大的模式比對功能。例如,可以使用通配符、範圍和條件來比對表達式,以下是一些常見的模式比對語法:

  • 通配符:* 比對任意字符,? 比對任意一個字符
  • 範圍:1-10 比對從 1 到 10 的所有數字
  • 條件:$x > 0 比對大於 0 的值

以下是使用模式比對功能的範例:

$number = 5;

$result = match ($number) {
    1, 2, 3 => 'The number is small',
    4, 5, 6 => 'The number is medium',
    7, 8, 9, 10 => 'The number is large',
    default => 'The number is unknown',
};

echo $result; // Output: The number is medium

在這個範例中,$number 變數的值是 5,因此會比對第二個選項,並返回 "The number is medium" 結果。

此外,match 表達式還可選返回表達式,這意味著,可以在比對成功時直接返回表達式的值,而無需使用變數來存儲結果,以下是一個簡單的範例:

$number = 3;

$result = match ($number) {
    1 => $number * 1,
    2 => $number * 2,
    3 => $number * 3,
    default => $number,
};

echo $result; // Output: 9

在這個範例中,$number 變數的值是 3,因此會比對到第三個條件,並直接返回表達式的值 $number * 3,即 9。

match 表達式是 PHP 8 中導入的一項強大功能,可以簡化多項條件判斷的語法,並提高程式碼的可讀性和可維護性。

延伸閱讀

© Copyright wibibi.com 網頁設計教學百科 基礎的網頁設計規劃、資料庫與程式設計 Since 2012