【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 を返します。