【PHP8.x】UnderflowException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされた例外に設定された例外コードを取得するメソッドです。このメソッドは、PHPの例外クラスの基底であるExceptionクラスで定義されており、UnderflowExceptionクラスはそれを継承しています。例外がスローされる際、new UnderflowException("エラーメッセージ", 101)のように、コンストラクタの第二引数に整数値でコードを渡すことが可能です。try...catchブロックで例外を捕捉した後、catchブロック内でこのgetCodeメソッドを呼び出すと、その設定された整数値(この例では101)が返されます。この機能を利用することで、同じUnderflowExceptionの中でも、エラーが発生した原因や状況を数値コードによって細かく分類できます。そして、取得したコード値に基づいて処理を分岐させるなど、より詳細で柔軟なエラーハンドリングを実装することが可能になります。もし例外オブジェクトの生成時にコードが指定されなかった場合、このメソッドはデフォルト値として0を返します。
構文(syntax)
1<?php 2 3try { 4 throw new UnderflowException("An underflow error occurred.", 101); 5} catch (UnderflowException $e) { 6 // 例外コードを取得します 7 $exceptionCode = $e->getCode(); 8 echo $exceptionCode; 9} 10 11?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、例外が発生した際に割り当てられたエラーコードを整数型(int)で返します。
サンプルコード
PHP UnderflowExceptionのgetCode()メソッドを理解する
1<?php 2 3/** 4 * 空のコンテナから要素を取り出そうとした際に発生する例外を処理するサンプルです。 5 */ 6function handleEmptyContainer(): void 7{ 8 // 例: スタックデータ構造を模した配列 9 $stack = []; 10 11 // 例外処理の開始 12 try { 13 // スタックが空かどうかをチェック 14 if (empty($stack)) { 15 // スタックが空の場合、UnderflowExceptionをスローします。 16 // 第1引数にエラーメッセージ、第2引数にエラーコードを指定します。 17 throw new UnderflowException('スタックから要素を取り出せません。', 1001); 18 } 19 // 本来はここで array_pop($stack) のような処理を行います。 20 } catch (UnderflowException $e) { 21 // catchブロックでスローされた例外を捕捉します。 22 23 // getCode() メソッドで例外に設定されたエラーコードを取得します。 24 $errorCode = $e->getCode(); 25 26 // 取得したエラーコードとエラーメッセージを出力します。 27 echo "エラーが発生しました。" . PHP_EOL; 28 echo "エラーコード: " . $errorCode . PHP_EOL; // 出力: エラーコード: 1001 29 echo "メッセージ: " . $e->getMessage() . PHP_EOL; // 出力: メッセージ: スタックから要素を取り出せません。 30 } 31} 32 33// 関数を実行します。 34handleEmptyContainer();
PHPのUnderflowExceptionクラスに属するgetCode()メソッドは、発生した例外オブジェクトに設定されているエラーコードを取得するためのものです。UnderflowExceptionは、スタックやキューのようなデータ構造が空の状態で要素を取り出そうとするなど、コンテナがアンダーフロー(下限を下回る)状態になった際に発生する例外です。
サンプルコードでは、tryブロックの中で、空の配列から要素を取り出す状況を想定し、throw new UnderflowException()を使って意図的に例外を発生させています。このとき、コンストラクタの第2引数にエラーコードとして1001が指定されています。
catchブロックでは、発生したUnderflowExceptionを捕捉し、その例外オブジェクト(変数$e)に対してgetCode()メソッドを呼び出しています。このメソッドは引数を取りません。戻り値として、例外が生成された際に指定された整数型(int)のエラーコードを返します。この例では1001が返され、画面に出力されています。このようにgetCode()を使うことで、例外の種類だけでなく、エラーコードに基づいてより詳細なエラーハンドリングを行うことが可能になります。
getCode()メソッドは、例外に設定されたエラーコードを整数で返します。このコードは、throw new UnderflowExceptionのように例外を発生させる際、コンストラクタの第2引数で指定した値です。もし第2引数を省略した場合は、デフォルト値の0が返される点に注意してください。取得したエラーコードを利用すると、エラーの種類を数値で判断し、その後の処理を分岐させることが可能になります。UnderflowExceptionは、サンプルコードのように空の配列などからデータを取り出そうとする論理的なエラーを示す場面で使われます。なお、getCode()は多くの例外クラスで共通して使える基本的なメソッドです。
PHP UnderflowException getCode() で例外コードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * UnderflowExceptionとgetCode()の使用例を示すクラス 7 */ 8class LimitedQueue 9{ 10 private array $items = []; 11 12 // キューが空であることを示す独自の例外コード 13 private const QUEUE_EMPTY_CODE = 404; 14 15 /** 16 * キューから要素を取り出します。 17 * 18 * @return mixed 19 * @throws UnderflowException キューが空の場合 20 */ 21 public function dequeue(): mixed 22 { 23 if (empty($this->items)) { 24 // キューが空の場合、メッセージと例外コードを指定して例外をスローします。 25 // このように、特定の状況を示すためにコードを設定します。 26 throw new UnderflowException( 27 'キューは空です。要素を取り出せません。', 28 self::QUEUE_EMPTY_CODE 29 ); 30 } 31 return array_shift($this->items); 32 } 33 34 /** 35 * キューに要素を追加します。 36 * 37 * @param mixed $item 38 */ 39 public function enqueue(mixed $item): void 40 { 41 $this->items[] = $item; 42 } 43} 44 45$queue = new LimitedQueue(); 46 47try { 48 // まだ何も入っていないキューから要素を取り出そうと試みる 49 echo "キューからデータを取り出します...\n"; 50 $queue->dequeue(); 51} catch (UnderflowException $e) { 52 // UnderflowException が発生した場合に、ここで処理を捕捉します。 53 echo "エラーが発生しました。\n"; 54 echo 'メッセージ: ' . $e->getMessage() . "\n"; 55 56 // getCode() を使って、例外に設定された整数コードを取得します。 57 // これにより、エラーの種類をプログラムで判別できます。 58 $errorCode = $e->getCode(); 59 echo '例外コード: ' . $errorCode . "\n"; 60 61 if ($errorCode === 404) { 62 echo "-> このエラーはキューが空の時に発生するものです。\n"; 63 } 64}
このサンプルコードは、例外処理においてgetCode()メソッドをどのように使うかを示しています。
getCode()は、例外オブジェクトに設定された整数コードを取得するためのメソッドです。このメソッドに引数はなく、戻り値として整数(int)を返します。この整数コードは、例外が作られる際に、エラーの種類を識別するために開発者が任意に設定できます。
コード内では、空のキューからデータを取り出そうとするとUnderflowExceptionが発生します。例外を発生(throw)させる際、エラーメッセージと共に、独自の例外コードとして404を指定しています。
try...catchブロックでこの例外を捕捉し、$e->getCode()を呼び出すことで、設定された404という値を取得しています。取得したコードが404であるかをif文で判定することで、エラーメッセージの文字列に頼ることなく、エラーの種類をプログラムで正確に識別し、状況に応じた適切な処理を実行することが可能になります。
getCode()は、例外に設定された整数(エラーコード)を取得するメソッドです。このコードは、throw new UnderflowException(...) のように例外を発生させる際の第2引数で指定し、指定しない場合は0が返ります。getMessage()が返すエラーメッセージは人間向けの説明ですが、getCode()が返す数値はプログラムがエラーの種類を正確に識別し、処理を分岐させる目的で使われます。同じ例外クラスでも原因に応じて異なるコードを割り当てれば、一つのcatchブロックでより詳細なエラー対応ができます。例外が発生しうる処理はtryブロックで囲み、catchブロックで捕捉しないとプログラムが停止してしまうため注意が必要です。