0Pricing
PHP Academy · レッスン

match式と名前付き引数

冗長なswitchをmatchに置き換え、明確さのために名前付き引数を使います

「match式と名前付き引数」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

match式

PHP 8.0でmatchが導入されました。これはswitchの簡潔な代替手段で、厳密な等価比較(===)を使用し、値を返します。

matchとswitchの違い

主な違いは、matchが厳密比較を使用すること、フォールスルーがないこと、そして式であるため値を返すことです。

<?php
$status = 2;
$label = match($status) {
    1 => "active",
    2 => "inactive",
    3 => "banned",
    default => "unknown",
};
echo $label; // "inactive"

1つのアームに複数の条件を指定

複数のmatch値をカンマで区切ると、同じ結果として処理できます。

<?php
$code = 404;
$type = match($code) {
    200, 201, 202 => "success",
    400, 422      => "client error",
    404           => "not found",
    500, 503      => "server error",
    default       => "other",
};
echo $type; // "not found"

一致しない場合のmatchの例外

どのアームにも一致せず、defaultもない場合、PHPはUnhandledMatchErrorをスローします。何もせず処理を続けるswitchとは異なります。

式としてのmatch

matchは値を返すため、関数の引数やreturn文の中、文字列補間の中など、インラインで使用できます。

<?php
echo "Status: ".match($active) {
    true  => "ON",
    false => "OFF",
};

名前付き引数

PHP 8.0の名前付き引数を使うと、パラメーター名を指定して、任意の順序で関数に引数を渡せます。

<?php
function makeTag(string $tag, string $content, string $class = ""): string {
    return "<$tag class=\"$class\">$content</$tag>";
}
echo makeTag(content: "Hello", tag: "p", class: "lead");

名前付き引数の利点

名前付き引数には、パラメーターが多い関数の可読性を高める、省略可能なパラメーターを省略できる、各値の意味を明確にできるという利点があります。

組み込み関数での名前付き引数

名前付き引数は、PHPの組み込み関数でも使用できます。

<?php
$arr = [3, 1, 4, 1, 5];
$result = array_slice(array: $arr, offset: 1, length: 3, preserve_keys: true);

名前付き引数と位置引数の併用

位置引数と名前付き引数は組み合わせられますが、名前付き引数は位置引数の後に指定する必要があります。

<?php
str_contains(haystack: "Hello World", needle: "World");
// or positional then named:
str_contains("Hello World", needle: "World");

array_mapでの名前付き引数

名前付き引数は、パラメーターの順序が分かりにくい可変長引数対応の組み込み関数で特に役立ちます。

実際のコードでのmatch

長いif/elseifチェーンをmatchに置き換えると、HTTPメソッドのルーティング、ステータスコードのマッピング、列挙型のような値に基づく分岐を処理できます。

<?php
$handler = match($_SERVER["REQUEST_METHOD"]) {
    "GET"    => new GetHandler(),
    "POST"   => new PostHandler(),
    "DELETE" => new DeleteHandler(),
    default  => throw new InvalidArgumentException("Unsupported method"),
};

まとめ

matchは、厳密で網羅的な、フォールスルーのない分岐を提供します。名前付き引数は、呼び出し箇所の可読性を高めます。どちらもPHP 8.0における大きな改善点です。

理解度チェック

どのmatchアームにも一致せず、defaultもない場合、何が起こるでしょうか。

よくある質問

「match式と名前付き引数」レッスンは無料ですか?

はい。「match式と名前付き引数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「match式と名前付き引数」で何を学びますか?

冗長なswitchをmatchに置き換え、明確さのために名前付き引数を使います ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「match式と名前付き引数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. match式と名前付き引数
  2. Nullsafe演算子と共用体型
  3. 列挙型(Enum)
  4. Fiber:協調的な並行処理
← PHP Academyに戻る