LoginSignup
3
3

More than 3 years have passed since last update.

PHP Excetionについての理解を深めるためにメモ

Posted at

はじめに

Excetionについての理解を深めるためにメモ

例外を呼び出すとき

$flag = false;
try {
    if(!$flag) {
        throw new Exception("flag is false.");
    }

} catch(Exception $e) {
    echo $e->getMessage();
}

実行結果

flag is false.

今一度、動作の流れを確認

もう決まり文句みたいにtry-catchと例外クラスを使っているが、今一度、丁寧に流れを追ってみる

throw new Exception("flag is false.");

例外を発生させるためにはtryブロックで囲む必要がある。
例外が発生した場合は、Exceptionクラスのインスタンスをthrowする
throwされた例外はcatchで補足される

ここでExceptionクラスの公式を確認。

public Exception::__construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )

Exceptionクラスのコンストラクタの第1引数でエラーメッセージをセットしているのね。

で、 catch(Exception $e)の$eは、Exceptionクラスのインスタンス

Exceptionクラスのメソッドいろいろ

$flag = false;
try {
    if(!$flag) {
        throw new Exception("flag is false.");
    }

} catch(Exception $e) {
    echo $e->getMessage().PHP_EOL;
    echo $e->getPrevious().PHP_EOL;
    echo $e->getCode().PHP_EOL;
    echo $e->getFile().PHP_EOL;
    echo $e->getLine().PHP_EOL;
    echo $e->getTraceAsString().PHP_EOL;
}

独自例外クラス

独自の例外クラスも例外クラスを継承するだけなので簡単

myexception.php
class MyException extends Exception { }

$flag = false;
try {
    if(!$flag) {
        throw new MyException("flag is false.");
    }

} catch(MyException $e) {
    echo $e->getMessage().PHP_EOL;
}

もちろん独自の例外クラスにメソッドを作成することもできる

myexception.php
class MyException extends Exception {
    public function getClass() {
        return __CLASS__;
    }
}

$flag = false;
try {
    if(!$flag) {
        throw new MyException("flag is false.");
    }

} catch(MyException $e) {
    echo $e->getMessage().PHP_EOL;
    echo $e->getClass().PHP_EOL;
}

実行結果

flag is false.
MyException

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3