PHP8からmatch式が使えるようになりました。
switch文に似ていますが挙動は異なるので、使う時には注意しましょう。
公式の記事はこちらです。
match式を使用するサンプルコード
サンプルコード
下記は数値を渡して、漢数字を返すmatch式です。
$score = 2;
$result = match ($score) {
1 => '一',
2 => '二',
3 => '三',
default => '他'
};
echo $result."\n"
switch文と似ていますが、match式では値が左の条件にマッチしたら、そのまま右に定義している返却値を返してくれます。
あと、switch文は比較する場合は相互変換した値の比較(==)ですが、matchでは型まで完全一致(===)です。
どれにも当てはまらない場合のデフォルトは、上記のようにdefaultを書くと定義することができます。
上記では、1,2,3どれでもない場合はデフォルトになります。
match式を実行する
上記のmatch文を実行すると、このように出力されます。
渡した値にマッチした返却値が返ってきました。
二
match式で発生するエラー
デフォルトを定義していない場合で、あてはまらない値を渡したら、このようにエラーになります。
Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string in /var/www/html/match.php:7
Stack trace:
#0 {main}
thrown in /var/www/html/match.php on line 7
このエラーはUnhandledMatchError
をExceptionとして、スローしています。
UnhandledMatchError
については、公式のこちらに書いています。
switch文との比較
defaultが定義されていない、下記のようなコード($scoreが4)の場合を確認すると
switch文では、エラーはスローされずに処理を抜けてきて、$result
には何も設定されていない状態になります。
match式で同じように書いた場合にはエラーになります。
$score = 4;
switch ($score) {
case 1:
$result = '一';
break;
case 2:
$result = '二';
break;
case 3:
$result = '三';
break;
}
また、下記のようなコード($scoreが’1′)の場合、switch文では、相互変換した値の比較なので、一致して、$result
は一になります。
match式同じように書いた場合には完全一致なので、一致せずにエラーになります。
$score = '1';
switch ($score) {
case 1:
$result = '一';
break;
case 2:
$result = '二';
break;
case 3:
$result = '三';
break;
}
コメント