【PHP8.x】LogicException::getMessage()メソッドの使い方
getMessageメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getMessageメソッドは、スローされた例外オブジェクトに設定されているエラーメッセージ文字列を取得するために実行するメソッドです。このメソッドは、LogicExceptionクラスが属するExceptionクラスから継承されたものであり、PHPの多くの標準例外クラスで共通して利用できます。プログラムの実行中に例外がスローされると、try...catchブロックでその例外オブジェクトを捕捉できます。捕捉したオブジェクトに対してこのメソッドを呼び出すことで、例外が発生した原因を示す具体的なメッセージを得ることが可能です。メッセージの内容は、通常、throw new LogicException('ここにエラーメッセージを指定');のように、例外オブジェクトが生成される際のコンストラクタの第一引数で指定された文字列となります。取得したエラーメッセージは、主にデバッグ時の原因調査や、ログファイルへのエラー内容の記録、あるいはユーザーへの通知などに活用されます。返り値はstring型で、例外発生時にどのような問題が起きたのかを把握するための重要な情報を提供します。
構文(syntax)
1final public getMessage(): string
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
例外が発生した際に、その例外がどのようなエラーメッセージを示しているのかを文字列として返します。
サンプルコード
PHP: $e->getMessage() で例外メッセージを取得する
1<?php 2 3/** 4 * LogicExceptionからエラーメッセージを取得するサンプル関数 5 * 6 * この関数は、意図的にLogicExceptionを発生させ、 7 * catchブロックで捕捉した例外オブジェクトからgetMessage()メソッドを 8 * 使ってエラーメッセージを取得し、表示します。 9 */ 10function showLogicExceptionMessage(): void 11{ 12 try { 13 // プログラムのロジックに問題がある状況を想定し、 14 // メッセージ付きでLogicExceptionをスロー(発生)させます。 15 throw new LogicException('これはロジックエラーのテストメッセージです。'); 16 17 } catch (LogicException $e) { 18 // スローされたLogicExceptionを捕捉します。 19 // $e は LogicException のインスタンスを保持する変数です。 20 21 // $e->getMessage() を呼び出し、例外が作成されたときに 22 // 設定されたエラーメッセージ(文字列)を取得します。 23 $message = $e->getMessage(); 24 25 // 取得したメッセージを出力します。 26 echo '例外を捕捉しました: ' . $message . PHP_EOL; 27 } 28} 29 30// 関数を実行します。 31showLogicExceptionMessage(); 32 33?>
LogicExceptionクラスのgetMessage()メソッドは、例外オブジェクトが保持しているエラーメッセージを文字列として取得するためのものです。プログラムの論理的な誤りによって発生した例外の原因を、具体的に知りたい場合などに使用します。
サンプルコードでは、まずtryブロックの中でthrow new LogicException(...)を使い、意図的に例外を発生させています。このとき、コンストラクタの引数として渡された「これはロジックエラーのテストメッセージです。」という文字列が、エラーメッセージとして例外オブジェクトの内部に設定されます。
次に、catch (LogicException $e)ブロックで、発生した例外を$eという変数で捕捉します。この変数$eは、発生した例外に関する情報を持つオブジェクトそのものです。
ここで$e->getMessage()を呼び出すと、$eオブジェクトに保存されていたエラーメッセージが文字列として返されます。このメソッドに引数は必要ありません。コードでは、返された文字列を変数$messageに代入し、echoを使って画面に出力しています。このように、getMessage()は例外発生時に何が起きたのかを示すメッセージを取得するための重要なメソッドです。
$e->getMessage()は、catchブロックで捕捉した例外オブジェクト(この例では$e)から、例外発生時に設定されたエラーメッセージ文字列を取得するためのメソッドです。このメッセージは、new LogicException()の引数で指定したものがそのまま返されます。注意点として、catchで指定する例外クラスは、実際に発生する例外クラスと一致、もしくはその親クラスである必要があります。また、サンプルコードのようにエラーメッセージを直接画面に出力する方法は、デバッグ時には便利ですが、本番環境ではシステムの内部情報が漏洩する可能性があるため避けるべきです。通常、エラーメッセージはログファイルに記録し、利用者には「エラーが発生しました」のような汎用的なメッセージを表示することが推奨されます。
PHP LogicException::getMessage() メッセージ切り詰める
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 長い例外メッセージを処理し、意図的に切り詰める(truncate)例を示します。 7 * LogicException::getMessage() は設定されたメッセージをそのまま返しますが、 8 * ログ出力などの際に長すぎるメッセージを短くしたい場合があります。 9 */ 10function handleLongExceptionMessage(): void 11{ 12 try { 13 // データベースの制約などでメッセージが非常に長くなる状況をシミュレート 14 $veryLongErrorMessage = '処理中に予期せぬ論理的エラーが発生しました。' . 15 '関連データ: ' . str_repeat('ABC-123 ', 30) . 16 'このエラーは、前提条件が満たされていない場合にスローされるべきです。'; 17 18 // LogicException を長いメッセージ付きでスローする 19 throw new LogicException($veryLongErrorMessage); 20 } catch (LogicException $e) { 21 // getMessage() を使って例外オブジェクトから完全なメッセージを取得 22 $fullMessage = $e->getMessage(); 23 24 echo '--- getMessage() で取得した元のメッセージ ---' . PHP_EOL; 25 echo $fullMessage . PHP_EOL; 26 echo '文字数: ' . mb_strlen($fullMessage) . PHP_EOL; 27 echo PHP_EOL; 28 29 // ログやUI表示のために、メッセージを100文字に切り詰める(truncated) 30 $maxLength = 100; 31 $truncatedMessage = mb_strimwidth($fullMessage, 0, $maxLength, '...'); 32 33 echo '--- 100文字に切り詰めたメッセージ ---' . PHP_EOL; 34 echo $truncatedMessage . PHP_EOL; 35 echo '文字数: ' . mb_strlen($truncatedMessage) . PHP_EOL; 36 } 37} 38 39// 関数を実行して結果を表示 40handleLongExceptionMessage();
LogicException::getMessage()メソッドは、プログラムの実行中に発生した論理的なエラーに関するメッセージを取得するための機能です。このメソッドは引数を取らず、例外が生成された際に設定されたエラーメッセージを文字列(string)として返します。
サンプルコードでは、まずthrowキーワードを使い、意図的に作成した非常に長いエラーメッセージを持つLogicExceptionを発生させています。次にcatchブロックでその例外を捕捉し、$e->getMessage()を呼び出すことで、設定されたメッセージを加工せずにそのまま取得し、表示しています。
getMessage()はメッセージをそのまま返すため、ログファイルへの出力や画面表示には長すぎることがあります。そこで、コードの後半ではmb_strimwidth()関数を用いて、取得したメッセージを指定した文字数に切り詰める(truncate)方法を示しています。このようにgetMessage()で取得した情報を必要に応じて加工することで、システムの運用やデバッグ作業に適した形式でエラー情報を扱うことが可能になります。
LogicException::getMessage()は、例外発生時に設定されたメッセージをそのまま返すメソッドです。このメソッド自体にメッセージを短くする機能はありません。サンプルコードのように、ログ出力などでメッセージが長すぎる場合は、開発者自身がmb_strimwidth()のような関数で文字列を切り詰める必要があります。特に日本語などのマルチバイト文字を扱う際は、文字化けを防ぐためにsubstr()ではなくmb_で始まる関数を使うことが重要です。また、ログに短いメッセージを記録する場合でも、デバッグで原因を調査できるよう、完全なエラーメッセージは別途詳細ログなどに保存しておくことを推奨します。