Menu
Coddy logo textTech

カスタム例外の作成

CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 56/68。

PHPの組み込みの Exception クラスは一般的なエラーハンドリングにはうまく機能しますが、独自のカスタム例外クラスを作成することで、より具体的で意味のあるエラーメッセージを提供できます。カスタム例外は、コード内のさまざまな種類の問題を区別し、それらを適切に処理するのに役立ちます。

カスタム例外を作成するには、extends キーワードを使用して PHP の基本 Exception クラスを拡張します。この継承により、カスタム例外に標準例外のすべての機能が提供されると同時に、独自の特定の動作を追加したり、単により説明的な名前を付けたりすることができます。

<?php
class InvalidEmailException extends Exception {
    // クラスは空でも構いません - Exceptionからすべてを継承します
}

// カスタムプロパティやメソッドを追加することもできます
class CustomException extends Exception {
    public function getCustomMessage() {
        return "Custom error: " . $this->getMessage();
    }
}
?>

カスタム例外の強力な点は、その記述的な名前と、特定の例外タイプをキャッチできる能力にあります。汎用的な Exception をキャッチする代わりに、InvalidEmailExceptionDatabaseConnectionException、あるいは作成したその他のカスタム例外をキャッチすることができます。これにより、エラーハンドリングがより正確になり、コードのメンテナンス性が向上します。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

challenge icon

チャレンジ

簡単

1つの入力を受け取ります。それは例外クラス名を表す文字列です。この入力は、カスタム例外クラスの名前として使用される単一の単語です(例:NegativeBalanceExceptionInvalidUsernameException)。

入力を読み取り、提供された名前を使用してカスタム例外クラスを作成してください。作成するカスタム例外クラスは、PHPの基本クラスである Exception を継承する必要があります。クラスを作成した後、"Custom exception created: " に続けて、入力として受け取ったクラス名を出力してください。

入力形式: 例外クラス名を表す文字列を含む1行(例:InvalidAgeException

期待される出力: Custom exception created: に続けて例外クラス名を表示

チートシート

PHPでカスタム例外を作成するには、extendsキーワードを使用してException基底クラスを継承します。

<?php
class InvalidEmailException extends Exception {
    // クラスは空でも構いません。Exceptionからすべてを継承します
}

// カスタムプロパティやメソッドを追加することもできます
class CustomException extends Exception {
    public function getCustomMessage() {
        return "Custom error: " . $this->getMessage();
    }
}
?>

カスタム例外は、より具体的で意味のあるエラーメッセージを提供し、汎用的なExceptionオブジェクトの代わりに特定の例外タイプをキャッチできるようにします。これにより、エラーハンドリングがより正確になり、コードのメンテナンス性が向上します。

自分で試してみよう

<?php
// 例外クラス名を読み込む
$className = trim(fgets(STDIN));

// TODO: カスタム例外クラスを作成するためのコードを以下に記述してください


// 結果を出力する
echo "Custom exception created: " . $className;
?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン