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機能を理解することが求められます。