PHPのmatch文をやさしく解説!初心者でもわかるPHP8の新機能
生徒
「PHPのバージョン8で新しく追加されたmatch文って何ですか?」
先生
「PHP8ではmatchという新しい構文が追加されて、switch文よりも便利に条件分岐が書けるようになりましたよ。」
生徒
「条件分岐ってifとかswitchのことですよね?それと何が違うんですか?」
先生
「いい質問ですね!それでは、PHPのmatch文の使い方を基本からしっかり解説していきましょう。」
1. PHPのmatch文とは?新しい条件分岐の書き方
PHPのmatch文は、PHP8から導入された「条件分岐をより簡潔かつ安全に書くための新しい仕組み」です。これまではif文やswitch文が主流でしたが、match文の登場により、コードの読みやすさとプログラムの正確性が格段に向上しました。
プログラミング未経験の方でも直感的に理解できるよう、まずは身近な「自動販売機のボタンと飲み物」の関係に例えたサンプルを見てみましょう。
// 自動販売機のボタン(1:コーラ、2:お茶、3:水)
$buttonNumber = 2;
// 押されたボタンに対応する飲み物を「match文」で決める
$drinkName = match($buttonNumber) {
1 => "コーラ",
2 => "お茶",
3 => "水",
default => "売切(対象外のボタン)"
};
echo "あなたが選んだのは「" . $drinkName . "」です。";
このコードでは、$buttonNumberが「2」なので、match文が瞬時に「お茶」を選び出し、変数$drinkNameにその結果を渡しています。このように、「特定の条件に一致した値をそのまま受け取れる」のがmatch文の最大の特徴です。
従来のswitch文と比較したとき、具体的には以下の4つのメリットがあります:
- ① 値をそのまま返せる: 式として評価されるため、上記のように変数に直接代入できます。
- ② 厳密な比較(===): 数値の
1と文字列の"1"を明確に区別して判定するため、バグが混入しにくくなります。 - ③
breakが不要: 書き忘れによる意図しない動作を防ぎ、記述量も減らせます。 - ④ 網羅性のチェック:
defaultを書かない場合に一致する条件がないとエラーを出すため、設定漏れを防げます。
一言でいうと、match文は「スッキリまとまってミスも防げる、進化版の条件分岐」。初心者こそ積極的に使いたい、非常にスマートな構文なのです。
2. PHPのmatch文:基本の書き方と初心者に優しい活用例
PHP 8.0から導入されたmatch文は、従来のswitch文をよりシンプルに、そして安全に記述できるように進化した構文です。プログラミングが初めての方でも、まずは「特定の条件にぴったり合うもの(マッチするもの)を探す仕組み」とイメージすればOKです。
まずは、日常の「信号機」を例に、最も基本的なプログラムを見てみましょう。
$color = "赤";
// 変数$colorの中身に「マッチ」するメッセージを選びます
$message = match($color) {
"赤" => "止まれ",
"青" => "進め",
"黄" => "注意",
default => "信号の色ではありません"
};
echo $message;
止まれ
このコードのポイントは、match($color)という記述です。これは「変数$colorの中身を見て、次のリストの中から一致するものを探してね」と指示しています。リストの最後にあるdefaultは、どの条件にも当てはまらなかった場合に選ばれる「その他」の役割を持っています。
match文は「値を返す」という特徴があるため、上記のようにそのまま変数($message)に結果を代入できるのが大きなメリットです。まるでパズルを完成させるように、シンプルで読みやすいコードが書けるようになります。
また、細かい点ですが、末尾にセミコロン(};)が必要な点に注意しましょう。これだけで条件分岐が驚くほどスッキリまとまります。
3. switch文とmatch文の違い:どっちを使うべき?
PHPにおいて、条件によって処理を分ける方法はいくつかあります。これまで主流だったswitch文と、PHP 8.0から登場したよりモダンなmatch文を比較してみましょう。初心者の方が特につまずきやすい「型の判定」に注目して解説します。
比較サンプル:数値と文字列の扱い
例えば、変数の中身が「数値の2」なのか「文字列の"2"」なのかを判定する場合、両者で結果が大きく変わります。
// 【従来の書き方】switch文
$number = 2; // 数値の2を代入
switch ($number) {
case 1:
$result = "1です";
break;
case "2": // 文字列の2を指定
$result = "文字列の2と判定されました(緩い比較)";
break;
case 2:
$result = "数値の2です";
break;
default:
$result = "その他です";
break;
}
echo $result;
// 結果:文字列の2と判定されました(緩い比較)
// 【これからの書き方】match文
$number = 2; // 数値の2を代入
$result = match($number) {
1 => "1です",
"2" => "文字列の2です",
2 => "数値の2です", // ここで正しく判定される
default => "その他です"
};
echo $result;
// 結果:数値の2です
従来のswitch文は「緩い比較(==)」を行うため、数値の2と文字列の"2"を同じものとして扱ってしまい、バグの原因になることがありました。
対してmatch文は、「厳密な比較(===)」を行います。値だけでなく「データ型」までしっかりチェックするため、より安全でミスが少ないコードを書くことができます。また、breakを書き忘れて意図しない処理が動く心配もありません。
プログラミング未経験の方は、まずは「より正確に中身をチェックしてくれるのがmatch文」と覚えておけば間違いありません。コードも短くスッキリ書けるため、2026年現在のモダンな開発現場ではmatch文の利用が推奨されています。
4. match文は「戻り値」をそのまま変数に入れられるのが最大のメリット!
PHP8から導入されたmatch文の最も画期的な点は、条件に応じた結果を「戻り値(返り値)」として直接受け取れることです。
これまでのswitch文では、結果を変数に入れるためにわざわざ各ケースの中で代入処理を書く必要がありましたが、match文ならコードが驚くほどスッキリします。プログラミング未経験の方でも直感的に理解しやすい、シンプルな書き換え例を見てみましょう。
$score = 85;
// match文の結果をそのまま $grade に代入
$grade = match(true) {
$score >= 90 => "最高ランクのA評価です!",
$score >= 80 => "合格ラインのB評価です!",
$score >= 70 => "まずまずのC評価です。",
default => "もう少し頑張りましょう(D評価)"
};
echo $grade;
合格ラインのB評価です!
このコードでは、match(true)という書き方を使っています。これは「右側の条件が true(正しい)になるものを探してね」という指示です。上から順番に点数をチェックし、条件に当てはまった瞬間にその右側のメッセージを「戻り値」として $grade という箱(変数)に放り込んでくれます。
このように、「条件判定と変数への代入」を一行で完結できるのがmatch文の便利さ。if文を何個も並べるよりも読みやすく、書き間違いによるバグも防げるため、モダンなPHP開発では欠かせないテクニックとなっています。
5. match文で複数条件を効率よく判定する方法
PHPのmatch文を使っていると、「AまたはBの場合はこの処理」というように、複数の条件をひとまとめにして扱いたい場面が出てきます。実は、match文はカンマ区切りで条件を並べるだけで、直感的に複数条件を指定することが可能です。
例えば、占いアプリで「1, 2, 3はラッキー」と判定したい場合、わざわざ1つずつ書く必要はありません。未経験の方でも分かりやすい、シンプルなサンプルを見てみましょう。
$num = 2; // 判定したい数値
$text = match($num) {
1, 2, 3 => "1から3のどれか(大当たり)です!",
4, 5 => "4か5(中当たり)です",
default => "それ以外(残念)です"
};
echo $text;
このように1, 2, 3 =>と記述するだけで、「1、または2、または3だったとき」というOR(または)の条件を簡単に作ることができます。以前のPHPで使われていたswitch文よりも、コードの記述量が格段に減り、読み間違い(バグ)を防ぎやすいのが最大のメリットです。
???? 初心者へのアドバイス:
「もし10個以上の大量の数値をチェックしたい」という場合は、match文にすべて書くとコードが長くなってしまいます。その場合はin_array()などの関数を使うのが正解ですが、3〜5個程度の条件をまとめるなら、このmatch文の書き方が最もスマートでSEO的にも「読みやすいコード」として推奨されます。
条件をスッキリまとめることで、後から見返したときにも「何をしているプログラムか」がひと目で分かるようになります。ぜひ活用してみてください。
6. match文を使った実践例!ユーザー入力で応用してみよう
実際のアプリケーションでは、ユーザーの入力に応じて処理を変える場面が多くあります。たとえば、選択肢から都道府県を選んで、その地方を表示する処理を考えてみましょう。
$pref = "福岡";
$region = match($pref) {
"北海道", "青森", "秋田" => "北海道・東北地方",
"東京", "神奈川", "千葉" => "関東地方",
"大阪", "京都", "兵庫" => "近畿地方",
"福岡", "佐賀", "長崎" => "九州地方",
default => "その他の地域"
};
echo $region;
九州地方
このように、match文は複数の値をまとめて管理したいときにも、とても見やすくて便利です。
まとめ
PHPのmatch文は、PHP8で導入された便利な条件分岐の構文であり、これまでのswitch文よりも直感的で明確な記述ができるのが特徴です。とくに厳密比較による正確な判定、戻り値として直接使える点、そして複数の値を一行でまとめられる点は、実践的な開発において大きな利点となります。現代のPHP開発では、読みやすさや保守性が非常に重視されるため、match文のようなシンプルで誤解の少ない構文は、多くの場面で活躍します。本文で紹介した基本構文やswitch文との違いを理解することで、初心者の方でもより正確な条件分岐が書けるようになります。 さらに、実際の開発環境ではユーザー入力をもとに処理を分岐したり、大量の値を整理して判定したりする場面が多くあります。そうしたとき、match文の構造化された記述は非常に見やすく、複数人で作業する開発現場でも役立ちます。また、match文とtrueを組み合わせた条件式の評価は、if文と似た柔軟な応用ができ、実務でよく利用されるテクニックの一つです。これらを理解しておくことで、コードの冗長さを避けられ、よりスマートなロジック設計が可能になります。 例えば下記のように、本文と同じスタイルで書かれたサンプルコードでは、match文を使って季節を返す簡単な処理を記述しています。実際のPHPアプリケーションでも応用できる書き方なので、ぜひ練習に取り入れてみてください。
$season = "春";
$message = match($season) {
"春" => "ぽかぽかした季節です",
"夏" => "海や花火が楽しい季節です",
"秋" => "紅葉が美しい季節です",
"冬" => "寒さが厳しい季節です",
default => "季節が判定できません"
};
echo $message;
このように、match文は値を返すシンプルな構文として扱えるため、複雑な条件式を整理したい場面でもスムーズに使えます。文章で説明した基本や応用例を繰り返し確認することで、自然とコードの理解が深まり、より高度な条件分岐へも応用できるようになります。PHP8以降は、機能の進化とともに開発効率の向上が求められる時代であり、match文はその中でも特に重要な要素です。基礎を押さえつつ、実践の中で繰り返し使っていくことで、扱いに慣れていくでしょう。 また、開発者が知っておくべきポイントとして、match文はstrict比較であるため、型の違いによる意図しない評価が起こりにくく、誤判定を防げる点があります。これはフォーム入力や外部APIとの連携など、扱うデータが多岐にわたる場面で特に有効です。こうした特性を理解したうえで使い分けることで、より堅牢で信頼性の高いアプリケーションが作れるようになります。今回の内容がPHP学習の大きな一歩となり、今後の開発にも役立つ知識として活用していただければ幸いです。
生徒
「今日のmatch文の説明で、一番便利だと思ったところはどこですか?」
先生
「やはり、戻り値として直接使える点ですね。switch文よりもコードが短くなりやすいのが魅力です。」
生徒
「厳密な比較で判定してくれるのも安心できますね。型の違いで誤判定が起きにくいのは良いと思いました。」
先生
「その通りです。特にフォーム入力など型が混ざりやすい場面では、match文の特性が役立ちます。」
生徒
「応用例の地方判定のコードもわかりやすかったです。同じ結果を返す条件をまとめられるのが便利でした。」
先生
「実践ですぐ使える書き方なので、ぜひ他の処理にも応用してみてください。慣れてくるとmatch文の構造がとても自然に感じられますよ。」