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

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

作成日: 更新日:

基本的な使い方

getPreviousメソッドは、現在の例外がスローされる直接の原因となった、先行する例外(previous exception)を取得するために実行するメソッドです。PHPでは、ある例外を捕捉(catch)した際に、その情報を保持したまま、より上位の処理に適した新しい例外をスローすることができます。この仕組みを「例外の連鎖」と呼びます。getPreviousメソッドは、この連鎖を遡ってエラーの根本原因を調査する際に非常に重要な役割を果たします。例えば、あるドメインロジックの実行中に予期せぬ値が検出されたためDomainExceptionがスローされたとします。その原因が、さらに下位の処理で発生したInvalidArgumentExceptionである場合、後者の例外を原因として前者の例外をスローすることが可能です。この状況でDomainExceptionオブジェクトに対してgetPreviousメソッドを呼び出すと、原因となったInvalidArgumentExceptionオブジェクトが返されます。これにより、開発者は表面的なエラーだけでなく、その背後にある根本的な問題を特定し、デバッグを効率的に進めることができます。もし先行する例外が存在しない場合、このメソッドはnullを返します。

構文(syntax)

1<?php
2
3try {
4    try {
5        // 最初の例外(原因)を発生させます。
6        throw new \InvalidArgumentException('無効なユーザーIDです。');
7    } catch (\InvalidArgumentException $e) {
8        // 捕捉した例外を3番目の引数($previous)に渡して、新しい例外をスローします。
9        // これにより例外がチェイン(連鎖)されます。
10        throw new \DomainException('ユーザー処理に失敗しました。', 0, $e);
11    }
12} catch (\DomainException $e) {
13    // getPrevious() メソッドを使って、チェインされた前の例外を取得します。
14    $previousException = $e->getPrevious();
15
16    if ($previousException) {
17        echo "現在の例外: " . $e->getMessage() . "\n";
18        echo "前の例外(原因): " . $previousException->getMessage() . "\n";
19    }
20}

引数(parameters)

引数なし

引数はありません

戻り値(return)

?Throwable

このメソッドは、例外処理の連鎖において、この例外の前に発生した例外オブジェクトを返します。もしこの例外が単独で発生し、前の例外がない場合は、null を返します。

関連コンテンツ