PHP 8の新機能の一つmatch式について【ウェブデザイン技能検定 1級学科範囲】

PHPはサーバーサイドのスクリプト言語として広く使用されています。
バージョン8.0.0以降で利用可能になったmatch式は、コードの可読性を高め、複雑な条件分岐をシンプルにする強力な機能です。

今回は、このmatch式について詳しく解説するとともに、PHP 8で新たに追加された他の機能についても一部簡単に紹介します。

match式とは

match式は、PHP 8.0.0で導入された新しい式で、switch文に似た構文を持ちますが、より強力で柔軟な条件分岐を可能にします。
主な特徴は以下の通りです:

  • 式の結果を返す: match式は、評価結果を返すため、変数に代入したり、関数の引数として使用することができます。
  • 型の厳密な一致: match式は型の厳密な一致を要求します。
    switch文とは異なり、型が異なる場合には一致しません。
  • デフォルトケースが不要: すべての条件が評価されない場合は、例外が発生するため、必ず条件が網羅されることが保証されます。

基本的な使用例

以下に、match式の基本的な使用例を示します。

$score = 85;

$result = match (true) {
    $score >= 90 => 'Excellent',
    $score >= 75 => 'Good',
    $score >= 60 => 'Satisfactory',
    default => 'Fail',
};

echo $result; // Output: Good

この例では、$scoreの値に基づいて評価され、結果が$resultに代入されます。

match式の詳細な特徴

1. 厳密な型の一致

match式は、型の厳密な一致を要求します。
これは、switch文と異なり、型の異なる値が一致しないことを意味します。

$value = 1;

$result = match ($value) {
    1 => 'One',
    '1' => 'String One',
    default => 'Unknown',
};

echo $result; // Output: One

この例では、数値の1と文字列の'1'は異なる型として扱われ、厳密に区別されます。

2. 式の評価結果を返す

match式は、評価結果を返すため、変数に代入したり、関数の引数として使用することができます。

function getGrade(int $score): string {
    return match (true) {
        $score >= 90 => 'A',
        $score >= 80 => 'B',
        $score >= 70 => 'C',
        $score >= 60 => 'D',
        default => 'F',
    };
}

echo getGrade(85); // Output: B

この例では、getGrade関数がスコアに応じて適切な評価を返します。

3. 例外の発生

match式では、すべての条件が網羅されていない場合に例外が発生します。これにより、未処理のケースが存在しないことが保証されます。

$value = 10;

$result = match ($value) {
    1, 2, 3 => 'Low',
    4, 5, 6 => 'Medium',
    // No default case
};

echo $result; // This will cause an UnhandledMatchError

この例では、$valueが10のため、いずれの条件にも一致せず、UnhandledMatchErrorが発生します。

PHP 8の他の新機能

PHP 8では、match式以外にも多くの新機能が追加されています。以下に主要な新機能を紹介します。

1. Nullsafe演算子

Nullsafe演算子は、オブジェクトのプロパティやメソッドにアクセスする際に、nullチェックを自動的に行います。

$country = $session?->user?->getAddress()?->country;
// $session, $user, or getAddress() is null, $country will be null

2. 名前付き引数

名前付き引数を使用することで、関数やメソッドの呼び出し時に引数を名前で指定できます。

function createUser(string $name, int $age, string $gender) {
    // ...
}

createUser(age: 25, name: 'John', gender: 'male');

3. コンストラクタプロパティプロモーション

コンストラクタプロパティプロモーションは、コンストラクタ内でプロパティの初期化を簡素化します。

class Point {
    public function __construct(
        private int $x = 0,
        private int $y = 0,
    ) {}
}

4. ユーザー定義属性(アノテーション)

ユーザー定義属性を使用することで、クラスやメソッド、プロパティにメタデータを追加できます。

#[Route('/path')]
class MyClass {
    // ...
}

5. Just-In-Time (JIT) コンパイル

JITコンパイルは、PHPのパフォーマンスを向上させるために、コードを実行時にネイティブマシンコードにコンパイルします。

まとめ

PHP 8のmatch式は、switch文に代わる強力な条件分岐ツールです。
厳密な型の一致、評価結果の返却、未処理のケースに対する例外処理などの特徴を持ち、コードの可読性と保守性を向上させます。
また、PHP 8では他にも多くの新機能が追加されており、これらの機能を活用することで、より洗練された効率的なプログラムを書くことができます。

ウェブデザイン技能検定においても、これらの最新のPHP機能を理解することが求められます。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事

 

スポンサードリンク