在 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 中導入的一項強大功能,可以簡化多項條件判斷的語法,並提高程式碼的可讀性和可維護性。
延伸閱讀