PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHP 8のmatch式(一致式)とは?switch文との違いと使い方を解説

PHP 8のmatch式(一致式)とは

match式は、PHP 8で新たに追加された機能です。従来のswitch-case文とよく似ていますが、より安全なセマンティクス(比較の挙動)を提供する点が大きな特徴です。

match式の主な特徴

  • switch-case文のような「caseとbreak」の構造を使用しません。複数の条件をカンマ区切りでまとめて指定できる結合条件に対応しており、コードブロックへ処理を移す代わりに値を返します
  • match式は「式」であるため、評価結果を変数に代入して保存できます
  • switch文のようにbreak文が不要です。ただし、各アームに記述できるのは単一行の式のみという制限があります。
  • 厳密な比較(===)を行うため、型の違いによる意図しないマッチを防げます。

例:PHP 7でのswitch文の書き方

<?php
   switch (1.0) {
      case '1.0':
         $result = "Hello World!";
         break;
      case 1.0:
         $result = "Looks good";
         break;
   }
   echo $result;
?>

出力結果

Hello World!

このようにswitch文は緩い比較(==)を行うため、数値の1.0と文字列の'1.0'が同じものとして扱われ、先に記述されたcase '1.0'がマッチしてしまいます。これが意図しないバグの原因になることがあります。

例:上記のコードをPHP 8のmatch式で書き換える

<?php
   echo match (1.0) {
      '1.0' => "Hello World!",
      1.0 => "Looks Good!",
   };
?>

出力結果

Looks Good!

match式は厳密な比較(===)を行うため、文字列'1.0'ではなく数値1.0が正しくマッチします。型を意図した通りに判定できるのがmatch式の強みです。

例:PHP 8のmatch式の基本的な使い方

<?php
   echo match (2) {
      1 => 'Company',
      2 => 'Department',
      3 => 'Employee',
   };
?>

出力結果

Employee

この例では、match式に渡した値「2」に対応するアームが評価され、'Department'ではなく…と一見思えますが、実際には値2に対応する'Department'が返されます。条件と返却値を「=>」で対応付けるシンプルな構文のため、コードの可読性も大きく向上します。

まとめ

  • match式はPHP 8以降で利用可能な新しい構文です。
  • break文が不要で、式として値を返せるため簡潔に書けます。
  • 厳密比較(===)を採用しているため、switch文よりも安全です。
  • どの条件にもマッチしない場合はUnhandledMatchError例外がスローされる点に注意しましょう。
  1. 【保存版】Python正規表現パターン例まとめ|文字クラス・繰り返し・アンカーを実例で解説

    Pythonでテキスト処理を行う際に欠かせないのが正規表現です。本記事では、reモジュールで使える代表的な正規表現パターンをカテゴリ別に一覧形式で解説します。文字クラス、特殊文字、繰り返し、グループ化、後方参照、アンカーまで、実例とともに確認していきましょう。 リテラル文字(そのままの文字) 特別な記号を含まない文字列は、そのまま記述すればリテラルとして扱われます。 番号例と説明 1python「python」という文字列そのものに一致します。 文字クラス 角括弧 [] を使うと、含まれる文字のいずれか1文字にマッチさせられます。^ を先頭に付けると否定(以外)の意味になります。 番

  2. Pythonの正規表現入門:re.match()とre.search()の違いをわかりやすく解説

    Pythonで正規表現を扱う際によく使われるのが、標準ライブラリ re モジュールに含まれる re.match() と re.search() の2つのメソッドです。どちらも文字列からパターンを探す機能を持ちますが、動作には重要な違いがあります。 re.match():文字列の先頭だけをチェックする re.match() は、文字列の先頭でパターンがマッチした場合にのみ結果を返します。先頭以外の場所でパターンが見つかっても、マッチとはみなされません。 例として、文字列「TP Tutorials Point TP」に対してパターン「TP」で match() を呼び出すと、文字列が「TP」で始まっ