Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】AssertionError::messageプロパティの使い方

messageプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

messageプロパティは、PHP 8で導入されたAssertionErrorクラスに属し、アサーションの失敗に関する詳細な情報を含む文字列を保持するプロパティです。アサーションとは、プログラムの特定の時点で、ある条件が真であると仮定し、それが本当に真であるかを検証する機能のことです。PHPでは、assert()関数やini設定によってこの機能を制御できます。

もしこのアサーションが失敗した場合、つまり仮定した条件が偽であった場合に、AssertionErrorがスローされます。このとき、messageプロパティには、アサーションがなぜ失敗したのか、具体的にどのような条件が満たされなかったのかを示すテキストメッセージが格納されます。これにより、開発者はプログラムの実行中にAssertionErrorが発生した際、どの部分で何が問題であったのかを迅速に把握し、問題解決のための手掛かりを得ることができます。

このプロパティは、デバッグ作業において非常に重要であり、エラーログの出力やエラーレポートの作成時に具体的なエラー内容を提供する際にも利用されます。AssertionErrorはThrowableインターフェースを実装しているため、try-catchブロックで適切に捕捉し、このmessageプロパティを参照することで、堅牢なエラーハンドリングを実装することが可能です。

構文(syntax)

1<?php
2
3try {
4    assert(false, "アサーションが失敗しました。");
5} catch (AssertionError $e) {
6    echo $e->message;
7}
8
9?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

AssertionError クラスの message プロパティは、アサーションエラーが発生した際に、その原因を説明する文字列を返します。

サンプルコード

PHP AssertionErrorでメッセージボード投稿を検証する

1<?php
2
3// PHP 8 以降では、assert() 関数が失敗した際に AssertionError をスローするように設定できます。
4// この設定を有効にすることで、アサート失敗を例外として扱えます。
5// 本番環境では php.ini で 'assert.exception = 1' を設定することを推奨します。
6// ここではサンプルコードとして、スクリプト内で一時的に設定します。
7ini_set('assert.exception', '1');
8
9/**
10 * メッセージボードへの投稿内容を検証する関数です。
11 *
12 * 投稿内容が空文字列でないことをアサートします。
13 * もし投稿内容が空の場合、AssertionError をスローします。
14 * これは、開発段階でプログラムの前提条件が満たされているかを確認するのに役立ちます。
15 *
16 * @param string $postContent メッセージボードに投稿される内容
17 * @throws AssertionError 投稿内容が空文字列の場合にスローされます。
18 */
19function validateMessageBoardPost(string $postContent): void
20{
21    // assert() 関数を使って、前提条件($postContent が空でないこと)をチェックします。
22    // 第1引数の条件が false の場合、第2引数で指定したメッセージとともに AssertionError がスローされます。
23    assert($postContent !== '', 'メッセージボードの投稿内容は空にできません。');
24
25    // 条件が満たされた場合、処理は続行されます。
26    echo "✅ 投稿内容: \"{$postContent}\" は有効です。\n";
27}
28
29// --- サンプル実行 ---
30
31echo "--- 有効なメッセージ投稿の例 ---\n";
32try {
33    // 有効な投稿内容で関数を呼び出します。
34    validateMessageBoardPost("こんにちは!PHPで安全なメッセージボードを作ろう。");
35} catch (AssertionError $e) {
36    // AssertionError が発生した場合は、catch ブロックでその例外を捕捉し、
37    // $e->message プロパティを使ってエラーメッセージを取得・表示できます。
38    echo "❌ エラーが発生しました: " . $e->message . "\n";
39}
40echo "\n";
41
42echo "--- 無効なメッセージ投稿の例 (空の投稿) ---\n";
43try {
44    // 無効な(空の)投稿内容で関数を呼び出します。
45    // ここで assert() が失敗し、AssertionError がスローされます。
46    validateMessageBoardPost("");
47} catch (AssertionError $e) {
48    // AssertionError が捕捉され、そのエラーメッセージが表示されます。
49    echo "❌ エラーが発生しました: " . $e->message . "\n";
50}
51
52?>

PHPのassert()関数は、開発段階でプログラムの前提条件を検証する際に利用されます。PHP 8以降では、ini_set('assert.exception', '1')を設定することで、アサートが失敗した際にAssertionError例外がスローされるようになります。

サンプルコードでは、メッセージボードの投稿内容が空でないことを検証するvalidateMessageBoardPost関数でassert()を使用しています。投稿内容が空文字列の場合、assert()が失敗しAssertionErrorがスローされます。

AssertionErrorクラスのmessageプロパティは、アサート失敗時に指定されたエラーメッセージを文字列として取得する目的で利用されます。このプロパティには引数がなく、エラーメッセージ(string)を返します。try-catchブロックでAssertionErrorを捕捉後、$e->messageのように参照することで、エラーの具体的な内容を簡潔に表示し、問題の原因特定に役立ちます。サンプルコードでは「メッセージボードの投稿内容は空にできません。」というメッセージを取得します。

サンプルコードの実行には、ini_set('assert.exception', '1')の設定が不可欠です。これにより、assert()関数の失敗がAssertionErrorとして捕捉できるようになります。この設定がないと、意図した例外処理は行われません。assert()は開発段階での前提条件チェックに有効ですが、本番環境では性能やセキュリティのため、php.iniでの設定を慎重に行う必要があります。AssertionErrorがスローされた際、$e->messageプロパティを使えば、assert()の第2引数で指定した詳細なエラーメッセージを取得できます。これをtry-catchブロックで捕捉し利用することで、問題特定や安全なエラー処理に役立ちます。

PHP AssertionErrorのmessageを表示する

1<?php
2
3// アサーションが失敗したときにAssertionErrorをスローするように設定します。
4// PHP 8ではデフォルトでAssertionErrorがスローされますが、
5// 明示的に設定することで意図を明確にし、初心者にもわかりやすくします。
6assert_options(ASSERT_EXCEPTION, true);
7
8/**
9 * アサーションエラーを意図的に発生させ、そのメッセージを表示するサンプル関数です。
10 * システムエンジニアを目指す初心者向けに、例外処理の基本と
11 * AssertionErrorクラスのmessageプロパティの使用例を示します。
12 */
13function demonstrateAssertionErrorMessage(): void
14{
15    echo "アサーションエラーのデモンストレーションを開始します。\n";
16    echo "意図的に失敗するアサーションを試みます。\n\n";
17
18    try {
19        // ここで条件 (1 === 2) が偽(false)となるため、AssertionErrorがスローされます。
20        // 第2引数はアサーションが失敗したときにエラーメッセージとして使用されます。
21        assert(1 === 2, "このメッセージはアサーションが失敗したときに表示されます。");
22        echo "アサーションは成功しました。(この行は通常実行されません)\n";
23    } catch (AssertionError $e) {
24        // AssertionErrorを捕捉し、そのメッセージプロパティを表示します。
25        // $e->message は、AssertionErrorオブジェクトに設定されたメッセージ文字列を返します。
26        echo "--- AssertionErrorを捕捉しました ---\n";
27        echo "エラーメッセージ: " . $e->message . "\n";
28        echo "ファイル: " . $e->getFile() . "\n";
29        echo "行: " . $e->getLine() . "\n";
30        echo "-------------------------------------\n";
31    } catch (Throwable $e) {
32        // AssertionError以外の予期せぬエラーも捕捉するための汎用的なcatchブロックです。
33        echo "--- 予期せぬエラーを捕捉しました ---\n";
34        echo "エラータイプ: " . get_class($e) . "\n";
35        echo "エラーメッセージ: " . $e->getMessage() . "\n";
36        echo "-------------------------------------\n";
37    }
38
39    echo "\nデモンストレーションを終了します。\n";
40}
41
42// 関数を実行し、アサーションエラーの発生とメッセージの表示を確認します。
43demonstrateAssertionErrorMessage();
44
45?>

このPHPサンプルコードは、プログラムの想定外の動作を検出する「アサーション」が失敗した際に発生するAssertionErrorクラスとそのmessageプロパティの使い方をシステムエンジニアを目指す初心者向けに示しています。

まず、assert_options(ASSERT_EXCEPTION, true);で、アサーション失敗時にAssertionErrorをスローするよう設定しています。demonstrateAssertionErrorMessage関数内では、try-catchブロックを使って例外処理の基本を学べます。tryブロックでは、assert(1 === 2, "...")という意図的に失敗するアサーションを実行しています。条件1 === 2が偽であるため、AssertionErrorがスローされます。この際、assert()関数の第2引数に指定した文字列がエラーメッセージとして利用されます。

catch (AssertionError $e)ブロックでこのエラーを捕捉した後、$e->messageを使ってエラーメッセージにアクセスしています。messageAssertionErrorクラスに直接所属するプロパティで、引数はなく、エラーの詳細を説明する文字列(string)を返します。これにより、開発者はプログラムの実行中に発生したエラーの内容を正確に把握し、デバッグやエラー通知に活用できます。このコードは、エラー発生時の具体的なメッセージ取得方法を理解するための良い例となります。

PHP 8では、assert()関数が失敗するとデフォルトでAssertionErrorがスローされます。サンプルコードのassert_options(ASSERT_EXCEPTION, true);は、この挙動を明示するための記述ですが、必須ではありません。AssertionErrormessageプロパティは、assert()関数の第二引数で指定したエラーメッセージ文字列を返します。このプロパティは、Throwableインターフェースが提供するgetMessage()メソッドと同様の役割を持ちますが、AssertionError固有のプロパティとして直接アクセスできます。本番環境ではアサーション自体を無効に設定することが多いため、デバッグ時と運用時での挙動の違いを理解することが重要です。例外処理をしっかり記述し、エラー発生時に適切なメッセージを表示することで、問題の早期発見に役立てられます。

関連コンテンツ