【PHP8.x】RangeException::__construct()メソッドの使い方
__constructメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
__constructメソッドは、新しいRangeExceptionオブジェクトを生成し、その初期化を実行するメソッドです。このメソッドはコンストラクタと呼ばれ、newキーワードを用いてRangeExceptionのインスタンスが作成される際に自動的に呼び出されます。RangeExceptionは、プログラムのロジック上、値が有効な範囲にないことを示すための例外です。例えば、関数の引数として0から100までの数値が期待されているにもかかわらず、それ以外の値が渡された場合などに、この例外を発生させることが適切です。このコンストラクタは、親クラスであるExceptionから継承されており、最大で3つの引数を受け取ります。第一引数のmessageには、例外の内容を説明する文字列であるエラーメッセージを指定します。第二引数のcodeには、例外を識別するための整数値である例外コードを設定できます。第三引数のpreviousには、この例外がスローされる原因となった、一つ前の例外オブジェクトを渡し、例外の連鎖を構成することが可能です。これらの情報を適切に設定することで、エラー発生時の状況を詳細に記録し、デバッグ作業を効率化することができます。
構文(syntax)
1<?php 2 3throw new RangeException("値が有効な範囲を超えています。", 101); 4 5?>
引数(parameters)
string $message = '', int $code = 0, ?Throwable $previous = null
- string $message: 例外発生時の詳細なエラーメッセージを指定する文字列。
- int $code = 0: 例外に紐づくエラーコードを指定する整数。
- ?Throwable $previous = null: この例外の前に発生した別の例外を指定する。
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP RangeException コンストラクタで例外を生成する
1<?php 2 3/** 4 * 生徒の成績を設定するクラス 5 */ 6class StudentGrader 7{ 8 /** 9 * 点数に基づいて成績を設定します。 10 * 点数が有効な範囲(0~100)にない場合、RangeException をスローします。 11 * 12 * @param int $score 点数 13 * @return string 成績 14 * @throws RangeException 点数が0未満または100を超える場合 15 */ 16 public function setGrade(int $score): string 17 { 18 // 点数が有効範囲外かチェック 19 if ($score < 0 || $score > 100) { 20 // RangeExceptionのコンストラクタを呼び出して例外インスタンスを生成し、スローする 21 // __construct(string $message, int $code) 22 throw new RangeException('点数は0から100の範囲で指定してください。', 101); 23 } 24 25 if ($score >= 80) { 26 return 'A'; 27 } elseif ($score >= 60) { 28 return 'B'; 29 } else { 30 return 'C'; 31 } 32 } 33} 34 35$grader = new StudentGrader(); 36 37// 例1: 有効な範囲の値を渡す 38try { 39 $grade = $grader->setGrade(95); 40 echo "点数95の成績: {$grade}" . PHP_EOL; 41} catch (RangeException $e) { 42 // このブロックは実行されない 43 echo "エラー: " . $e->getMessage() . PHP_EOL; 44} 45 46echo "--------------------" . PHP_EOL; 47 48// 例2: 無効な範囲の値を渡し、例外をキャッチする 49try { 50 // 無効な値(101)を渡して、意図的に例外を発生させる 51 $grader->setGrade(101); 52} catch (RangeException $e) { 53 // スローされた例外をキャッチし、コンストラクタで設定した情報を取得する 54 echo "例外がキャッチされました!" . PHP_EOL; 55 echo "メッセージ: " . $e->getMessage() . PHP_EOL; // __constructの$message引数 56 echo "エラーコード: " . $e->getCode() . PHP_EOL; // __constructの$code引数 57 echo "ファイル: " . $e->getFile() . PHP_EOL; 58 echo "行番号: " . $e->getLine() . PHP_EOL; 59}
RangeException::__constructは、RangeExceptionクラスのインスタンスを生成するためのコンストラクタです。コンストラクタは、クラスから新しいオブジェクトが作られる際に呼び出される特別なメソッドで、そのオブジェクトの初期設定を行います。RangeExceptionは、プログラム中の値が期待される有効範囲を超えた場合に発生させる例外です。
このコンストラクタには3つの引数があります。第一引数の$messageは、なぜ例外が発生したのかを説明するエラーメッセージを文字列で設定します。第二引数の$codeは、エラーの種類を識別するための整数コードです。第三引数の$previousは、例外が連鎖する場合に使いますが、通常は省略可能です。コンストラクタはオブジェクトを初期化する役割を持つため、戻り値はありません。
サンプルコードでは、生徒の点数が0未満または100を超える場合に、new RangeException()を呼び出して例外オブジェクトを生成し、throwキーワードで意図的に例外を発生させています。catchブロックでは、その例外を捕捉し、コンストラクタに渡されたメッセージとエラーコードを、それぞれgetMessage()メソッドとgetCode()メソッドを使って取得・表示しています。これにより、エラー発生時にその原因を具体的に知ることができます。
RangeExceptionのような例外を発生させる際は、newキーワードでインスタンスを作成し、それをthrowキーワードで投げます。newを忘れるとエラーになるので注意が必要です。コンストラクタの第1引数に渡したエラーメッセージはgetMessage()で、第2引数のエラーコードはgetCode()で取得できます。これらはエラーの原因特定や、エラーの種類に応じた処理を実装する際に役立ちます。また、throwされた例外はtry...catch構文で捕捉しないとプログラムが停止してしまいます。例外が発生しうる処理はtryブロックで囲み、catchブロックで適切に処理することが重要です。値が期待される範囲外である場合にRangeExceptionを使うことで、エラーの種類がコードから理解しやすくなります。
PHP RangeException コンストラクタで例外を投げる
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 指定されたパーセンテージが有効な範囲内にあるか検証します。 7 * 8 * @param int $percentage 検証するパーセンテージ (0〜100) 9 * @throws RangeException パーセンテージが0未満または100より大きい場合にスローされます。 10 */ 11function validatePercentage(int $percentage): void 12{ 13 // パーセンテージが有効な範囲 (0〜100) にない場合 14 if ($percentage < 0 || $percentage > 100) { 15 // RangeExceptionのコンストラクタを使用して例外オブジェクトを生成し、スローします。 16 // 第1引数: エラーメッセージ (string) 17 // 第2引数: エラーコード (int) 18 throw new RangeException( 19 "パーセンテージは0から100の間でなければなりません。指定された値: {$percentage}", 20 1001 21 ); 22 } 23 24 echo "パーセンテージ '{$percentage}%' は有効です。" . PHP_EOL; 25} 26 27try { 28 // 正常な値を渡して関数を呼び出す 29 validatePercentage(75); 30 31 // 不正な値(範囲外)を渡して関数を呼び出す 32 validatePercentage(120); 33} catch (RangeException $e) { 34 // スローされたRangeExceptionをキャッチします。 35 // コンストラクタで設定したメッセージとコードを取得して表示します。 36 echo "エラーが発生しました!" . PHP_EOL; 37 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 38 echo "コード: " . $e->getCode() . PHP_EOL; 39}
RangeExceptionのコンストラクタ__constructは、値が有効な範囲外であることを示す例外オブジェクトを生成する際に使用されます。このメソッドは、new RangeException()のように新しいオブジェクトが作成されるときに自動的に呼び出されます。戻り値はなく、オブジェクトのプロパティを初期化する役割を担います。
サンプルコードでは、validatePercentage関数が引数のパーセンテージを検証します。値が0から100の範囲外だった場合、new RangeException()を用いて例外オブジェクトを生成し、throwキーワードで処理を中断して例外を発生させます。
コンストラクタの第1引数$messageには、「パーセンテージは0から100の間でなければなりません...」という、エラーの詳細を説明する文字列を渡しています。第2引数$codeには、エラーの種類を識別するための数値として1001を指定しています。第3引数の$previousはこのコードでは使用されていません。
try...catchブロックによって、発生した例外が捕捉されます。catchブロック内では、$e->getMessage()と$e->getCode()メソッドを呼び出すことで、コンストラクタで設定したエラーメッセージとエラーコードをそれぞれ取得して表示できます。このように、具体的なエラー情報を設定した例外を生成することで、プログラムの問題を特定しやすくなります。
new RangeException()は、例外オブジェクトを生成するための特別なメソッド(コンストラクタ)です。第1引数のエラーメッセージには、何が問題だったのか後から見ても分かるように具体的な内容を記述することが重要です。サンプルコードのように、問題となった変数の値を含めるとデバッグが容易になります。第2引数のエラーコードは、エラーの種類をプログラムで識別するための数値です。独自のコードを設定することで、エラーの種類に応じた処理を実装できます。コンストラクタで生成したオブジェクトは、throwキーワードと組み合わせて使うことで初めて例外として機能し、catchブロックで捕捉できるようになる点に注意してください。