SwitchとMatch文
switchとPHP 8のmatchを使い、多分岐ロジックを記述します。
「SwitchとMatch文」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
switch と if のチェーン
1つの変数の値に基づいて多くの分岐を行う場合、長い if/elseif チェーンよりも switch のほうがすっきりします。
PHP 8では、現代的で厳密な代替手段として match が導入されました。
switch 文の基本
switch は式を1回評価し、一致する case ブロックを実行します。
<?php
$day = 'Monday';
switch ($day) {
case 'Monday':
echo 'Start of work week';
break;
case 'Friday':
echo 'Almost weekend';
break;
default:
echo 'Midweek';
}フォールスルーの動作
break がない場合、実行は次の case へフォールスルーします。意図的に処理をまとめるテクニックです。
<?php
$status = 2;
switch ($status) {
case 1:
case 2:
case 3:
echo 'In progress'; // runs for 1, 2, or 3
break;
case 4:
echo 'Done';
break;
}switch は弱い比較を使用する
switch は内部で ==(弱い比較)を使用するため、予想外の一致が発生することがあります。
<?php
$val = 0;
switch ($val) {
case 'foo': // 0 == 'foo' in PHP 7!
echo 'match foo';
break;
case 0:
echo 'match zero'; // PHP 8 fixes this
break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)PHP 8の match 式
match は switch に似ていますが、厳密な比較を使用し、値を返すため、break は必要ありません。
<?php
$status = 'active';
$label = match($status) {
'active' => 'Currently active',
'inactive' => 'Not active',
'pending' => 'Awaiting activation',
default => 'Unknown status',
};
echo $label; // Currently active一致しない場合の match の例外
match でどのアームにも一致せず、default もない場合は、UnhandledMatchError がスローされます。
<?php
$code = 99;
try {
$result = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
// no default!
};
} catch (\UnhandledMatchError $e) {
echo 'Unhandled match value: ' . $code;
}複数の条件を持つ match
1つの match アームには、カンマで区切った複数の値を指定できます。
<?php
$lang = 'tr';
$region = match($lang) {
'en', 'en-US', 'en-GB' => 'English',
'tr', 'az' => 'Turkic',
'fr', 'be', 'ca' => 'French-speaking',
default => 'Other',
};
echo $region; // Turkic複雑な式を使う match
match アームの右辺には、任意の式を使用できます。
<?php
$score = 85;
$grade = match(true) {
$score >= 90 => 'A',
$score >= 80 => 'B', // matches
$score >= 70 => 'C',
default => 'F',
};
echo $grade; // Bmatch からの return
match は式なので、値が必要な場所であればどこでも使用できます。
<?php
function getHttpMessage(int $code): string {
return match($code) {
200 => 'OK',
201 => 'Created',
400 => 'Bad Request',
401 => 'Unauthorized',
404 => 'Not Found',
default => 'Unknown',
};
}
echo getHttpMessage(404); // Not Foundreturn コンテキストでの switch
switch は関数内で使用して異なる値を返せますが、match のほうがすっきり記述できます。
<?php
function describe(int $n): string {
switch (true) {
case $n < 0: return 'negative';
case $n === 0: return 'zero';
default: return 'positive';
}
}
echo describe(-5); // negative
echo describe(0); // zero
echo describe(7); // positiveswitch と match の使い分け
選択の指針です。
- 厳密な比較と戻り値が必要な場合は
matchを使用します(PHP 8以降) - 処理をフォールスルーでまとめる場合や、PHP 7をサポートする場合は
switchを使用します - 複数の値による分岐では、どちらも長い if/elseif チェーンよりすっきり記述できます
クイックチェック
match 式でどのアームにも一致せず、default もない場合はどうなりますか。
まとめ: switch と match
主な違いです。
switch— 弱い比較、フォールスルー、PHP 4以降match— 厳密な比較、フォールスルーなし、値を返す、PHP 8以降- match は default がない場合に
UnhandledMatchErrorをスローします - match アームでは、カンマで区切った複数の値を受け付けます
次は for ループと while ループです。
よくある質問
「SwitchとMatch文」レッスンは無料ですか?
はい。「SwitchとMatch文」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「SwitchとMatch文」で何を学びますか?
switchとPHP 8のmatchを使い、多分岐ロジックを記述します。 ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「SwitchとMatch文」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if、elseif、else
- SwitchとMatch文
- forとwhileループ
- foreachとループ制御