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

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

作成日: 更新日:

基本的な使い方

getMessageメソッドは、UnhandledMatchError クラスが持つメソッドで、エラーメッセージを取得するメソッドです。

UnhandledMatchError は、PHP 8で導入された新しいmatch式を使用する際に発生する特定のエラーです。このエラーは、match式が取り得る可能性のあるすべての値を網羅して処理するケース(case)を提供していない場合に発生します。たとえば、ある変数が特定の文字列や数値になる可能性があるのに、その一部のケースしかmatch式で定義されておらず、かつdefaultケースも用意されていない場合に、このUnhandledMatchErrorがスローされます。

このgetMessageメソッドは、そのようなUnhandledMatchErrorオブジェクトから、エラーの具体的な内容を説明する文字列メッセージを取得するために使用されます。開発者がtry-catchブロックなどを用いてエラーを捕捉した際、このメソッドを呼び出すことで、「Unhandled match value of type string」のように、何が問題だったのかを示す詳細な情報を得ることができます。

取得したエラーメッセージは、アプリケーションのデバッグ作業において原因を特定する重要な手掛かりとなったり、システムログに出力してエラー履歴を記録したり、場合によってはユーザーインターフェースに表示して状況を伝えるためにも利用されます。getMessageメソッドは、PHPのエラーや例外を扱う際に共通して利用される基本的なメソッドの一つであり、エラーハンドリングにおいて不可欠な役割を果たします。

構文(syntax)

1<?php
2
3try {
4    $value = 3;
5    $result = match ($value) {
6        1 => 'one',
7        2 => 'two',
8        // '3' のケースが定義されていないため UnhandledMatchError が発生
9    };
10} catch (UnhandledMatchError $e) {
11    echo $e->getMessage();
12}

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

このメソッドは、例外が発生した際のエラーメッセージを文字列として返します。

サンプルコード

PHP 8 UnhandledMatchError getMessage() を取得する

1<?php
2
3/**
4 * PHP 8 の UnhandledMatchError::getMessage() の使用例を示します。
5 *
6 * match 式がすべての可能なケースをカバーしていない場合に発生する
7 * UnhandledMatchError を捕捉し、そのエラーメッセージを取得する方法を示します。
8 */
9function demonstrateUnhandledMatchErrorHandling(): void
10{
11    $testValue = 3; // match式で定義されていない値
12
13    try {
14        // $testValue がどのケースにも一致しないため、UnhandledMatchError が発生します。
15        $result = match ($testValue) {
16            1 => "値は1です。",
17            2 => "値は2です。",
18            // $testValue が 3 の場合、UnhandledMatchError がここで発生します。
19            // default ケースが定義されていないためです。
20        };
21        echo "処理結果: " . $result . PHP_EOL; // この行は実行されません
22    } catch (UnhandledMatchError $e) {
23        // UnhandledMatchError を捕捉します。
24        // getMessage() メソッドを使用して、エラーの詳細メッセージを取得します。
25        echo "エラーを捕捉しました: " . $e->getMessage() . PHP_EOL;
26    }
27}
28
29// 関数を実行して、UnhandledMatchError の発生と捕捉、メッセージ取得を確認します。
30demonstrateUnhandledMatchErrorHandling();

PHP 8から導入されたmatch式は、複数の条件分岐を簡潔に記述するための機能です。しかし、このmatch式が取り得る全ての値に対する処理(ケース)を定義していない場合、UnhandledMatchErrorというエラーが発生します。これは、どのケースにも一致しない値が与えられた際に、プログラムが予期せぬ動作をするのを防ぐために設計されたエラーです。

提示されたサンプルコードは、このUnhandledMatchErrorが実際にどのように発生し、それを適切に処理する方法を示しています。コードの中では、$testValue3が設定されていますが、match式には12のケースしか定義されていません。そのため、$testValue3の場合、UnhandledMatchErrorが発生します。

プログラムはtry-catchブロックを使用することで、発生したUnhandledMatchErrorを捕捉し、処理を中断せずに継続できます。捕捉されたエラーオブジェクト$eに対して、getMessage()メソッドを呼び出すことで、エラーの詳細な内容を文字列として取得しています。getMessage()メソッドは引数を一切必要とせず、発生したエラーに関する具体的な説明を文字列(string)型で返します。この機能により、開発者はエラーの原因を特定しやすくなり、ユーザーに対して分かりやすいエラーメッセージを表示することが可能になります。このサンプルコードを実行すると、「エラーを捕捉しました: Match expression does not handle value 3」のようなメッセージが出力されます。

match式はPHP 8からの機能で、全てのケースを網羅しないとUnhandledMatchErrorが発生します。サンプルコードのようにdefaultケースがない場合に、想定外の値が渡されるとエラーとなります。このエラーを回避するには、必ずdefaultケースを記述するか、渡される値の範囲を厳密に管理してください。

try-catchブロックでUnhandledMatchErrorを捕捉し、$e->getMessage()で詳細なエラーメッセージを取得することは、エラー発生時の原因特定や適切なエラー処理を行う上で非常に重要です。捕捉しない場合、プログラムが予期せず停止してしまいます。getMessage()で得られる情報は、デバッグやユーザーへの適切な通知に活用できます。

PHP 8 UnhandledMatchError getMessage() を取得する

1<?php
2
3/**
4 * UnhandledMatchError の発生と getMessage() メソッドの使用例を示します。
5 *
6 * PHP 8 の match 式がすべての可能な値をカバーしていない場合に発生する
7 * UnhandledMatchError を意図的に生成し、そのエラーを捕捉して
8 * getMessage() メソッドでエラーメッセージを取得します。
9 */
10function demonstrateUnhandledMatchError(): void
11{
12    // UnhandledMatchError を発生させるための値
13    // この値は、以下の match 式のどのケースにも一致しません。
14    $value = 'grape';
15
16    try {
17        // match 式が $value ('grape') のケースを処理しないため、
18        // UnhandledMatchError がスローされます。
19        $result = match ($value) {
20            'apple'  => 'リンゴです',
21            'banana' => 'バナナです',
22            // 'grape' のケースがないため、ここで UnhandledMatchError が発生します。
23        };
24        // この行は UnhandledMatchError が発生した場合、実行されません。
25        echo "結果: " . $result . "\n";
26    } catch (UnhandledMatchError $e) {
27        // UnhandledMatchError を捕捉します。
28        // getMessage() メソッドは、エラーの詳細な説明を文字列として返します。
29        $errorMessage = $e->getMessage();
30
31        echo "捕捉されたエラーのクラス: " . get_class($e) . "\n";
32        echo "エラーメッセージ: " . $errorMessage . "\n";
33    }
34}
35
36// 関数を実行します。
37demonstrateUnhandledMatchError();
38

このPHPコードは、PHP 8のmatch式が全ての可能な値を網羅的に処理しきれない場合に発生するUnhandledMatchErrorと、そのエラーオブジェクトから詳細なメッセージを取得するgetMessage()メソッドの使用例です。

match式は、指定された値と厳密に一致するケースを評価する制御構造です。サンプルコードでは、$valueが'grape'であるにもかかわらず、match式内に'grape'に対応するケースが存在しないため、UnhandledMatchErrorが発生します。

プログラムがエラーで停止しないよう、try-catchブロックでこのエラーを捕捉しています。catch (UnhandledMatchError $e)により、発生したエラーオブジェクトが$e変数に格納されます。

$e->getMessage()は、捕捉したUnhandledMatchErrorオブジェクトに組み込まれているメソッドです。このメソッドは引数を取らず、エラーの具体的な状況や原因を説明するstring型のメッセージを返します。このコードは、getMessage()で取得されたエラーメッセージを画面に出力することで、開発者がエラーの原因を特定し、デバッグやエラーハンドリングに役立てる方法を示しています。

match式を利用する際は、すべての可能な値を網羅するか、defaultキーワードで予期せぬ値を処理するよう注意が必要です。この条件を満たさない値が渡されると、UnhandledMatchErrorが発生し、プログラムが意図せず停止する原因となります。getMessage()メソッドは、発生したエラーに関する具体的な情報を文字列として提供するため、エラー発生時の問題特定やデバッグ作業において非常に有効です。予期せぬエラーからシステムを保護し、安定した動作を確保するため、try-catchブロックを用いて適切にエラーを捕捉し、ログ出力やユーザーへの適切な通知を行うことが、安全で堅牢なコードを記述する上で重要になります。

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