【PHP8.x】getCodeメソッドの使い方

getCodeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getCodeメソッドは、UnhandledMatchErrorクラスが持つ、このエラーに関連するコードを取得するメソッドです。UnhandledMatchErrorは、PHP 8で導入されたmatch式において、与えられた値がどのcaseの条件にも一致しなかった場合に発生する特殊なエラーを表します。

このgetCodeメソッドは、発生したエラーを識別するための数値、いわゆるエラーコードを返します。プログラミングにおいて、エラーの種類を数値で区別することは非常に重要です。例えば、プログラムが特定のエラーコードを受け取った場合に、ユーザーに対して異なるエラーメッセージを表示したり、ログに詳細な情報を記録したりするなど、状況に応じた柔軟な対応が可能になります。

UnhandledMatchErrorの場合、通常このメソッドは「0」というエラーコードを返します。これは、PHPの内部的なエラーメカニズムにおいて、特定の数値が割り当てられていない場合に一般的な挙動です。システムエンジニアを目指す方にとって、エラーコードを理解し、適切に処理することは、堅牢でメンテナンスしやすいプログラムを開発するための基本的なスキルの一つとなります。このメソッドを使うことで、予期せぬmatchエラーが発生した際にも、その情報を正確に取得し、適切なエラーハンドリングを実装することができます。

構文(syntax)

1<?php
2
3try {
4    $value = 5;
5    match ($value) {
6        1 => 'One',
7        2 => 'Two',
8        // $value が 5 の場合、どのケースにも一致しないため UnhandledMatchError が発生
9    };
10} catch (UnhandledMatchError $e) {
11    // UnhandledMatchError オブジェクトからエラーコードを取得する
12    $errorCode = $e->getCode();
13}
14
15?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このメソッドは、例外が発生した原因を示す整数コードを返します。

サンプルコード

UnhandledMatchError::getCode() を取得する

1<?php
2
3/**
4 * UnhandledMatchError::getCode() の動作を示すサンプルコード。
5 * PHP 8 で導入された match 式が、与えられた値に一致するケースを見つけられなかった場合に
6 * スローされる UnhandledMatchError を捕捉し、そのエラーコードを取得する方法を示します。
7 */
8function demonstrateUnhandledMatchErrorGetCode(mixed $value): void
9{
10    echo "--- 値: " . var_export($value, true) . " ---" . PHP_EOL;
11
12    try {
13        // match 式を使用。
14        // UnhandledMatchError を発生させるため、全ての可能な値に対応する 'default' ケースは設けていません。
15        $result = match ($value) {
16            1 => "One",
17            2 => "Two",
18            // 例えば '3' や 'Hello' などの値はここに一致するケースがないため、
19            // UnhandledMatchError がスローされます。
20        };
21        echo "結果: " . $result . PHP_EOL;
22    } catch (UnhandledMatchError $e) {
23        // UnhandledMatchError を捕捉し、getCode() メソッドを呼び出す
24        echo "UnhandledMatchError を捕捉しました。" . PHP_EOL;
25        echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL;
26        echo "エラーコード (getCode()): " . $e->getCode() . PHP_EOL; // UnhandledMatchError のエラーコードを取得
27        // PHP 8 の UnhandledMatchError のコードは通常 0 ですが、このメソッドが提供されていることを示します。
28    } catch (Throwable $e) {
29        // その他の予期せぬ例外を捕捉
30        echo "予期せぬエラーを捕捉しました。" . PHP_EOL;
31        echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL;
32        echo "エラーコード: " . $e->getCode() . PHP_EOL;
33    }
34
35    echo PHP_EOL;
36}
37
38// --- サンプル実行 ---
39
40// ケース1: match 式で一致するケースがない値を渡す。
41// UnhandledMatchError が発生し、getCode() でエラーコードを取得します。
42demonstrateUnhandledMatchErrorGetCode(3);
43demonstrateUnhandledMatchErrorGetCode("Hello");
44
45// ケース2: match 式で一致するケースがある値を渡す。
46// この場合、UnhandledMatchError は発生しません。
47demonstrateUnhandledMatchErrorGetCode(1);
48

UnhandledMatchError::getCode()は、PHP 8から導入されたmatch式において、与えられた値に一致するケースが見つからなかった場合に発生するUnhandledMatchErrorオブジェクトから、そのエラーコードを取得するためのメソッドです。

このメソッドは引数を必要とせず、エラーコードを整数型(int)で返します。通常、UnhandledMatchErrorのエラーコードは0ですが、例外オブジェクトが共通で持つgetCode()メソッドとして提供されています。

提供されたサンプルコードでは、match式に一致するケースがない値(例:3"Hello")を意図的に渡すことでUnhandledMatchErrorを発生させています。try-catchブロックでこのエラーを捕捉し、$e->getCode()を呼び出すことでエラーコードが出力されることを示しています。これにより、プログラムがエラーに直面した際に、そのエラーの種類を特定し、適切な処理を行うための一助となります。match式に一致する値(例:1)を渡した場合はエラーは発生せず、正常な処理が行われることも確認できます。

このサンプルコードは、PHP 8で導入されたmatch式がどのケースにも一致しない場合に発生するUnhandledMatchErrorの捕捉方法と、そのgetCode()メソッドの利用を示しています。getCode()でエラーコードを取得できますが、UnhandledMatchErrorのエラーコードは通常0である点がポイントです。実務では、このようなエラーの発生を防ぐために、match式には必ずdefaultケースを設けることを推奨します。これにより、予期せぬ値が渡されてもシステムが停止せず、安定した動作を保てます。エラーの検出と適切な処理には、try-catch文の利用が不可欠であることを理解し、適切に例外を扱うようにしてください。

【PHP8.x】getCodeメソッドの使い方 | いっしー@Webエンジニア