PHPのException基底クラスの歴史
少し古いPHPを触れることがあるのですが、普段の書き方をした結果落ちるなどがあったのでPHPにおけるExceptionの変遷を調べてみました。
といっても、当時のブログの断片集のようになっていますが、PHPのバージョンでExceptionがおかしいぞ?となった時の参考になれば幸いです。
PHP5 ~Exceptionの始まり~
2004年、PHP5と共にPHPのExceptionは始まりました。
当時はプログラミングの言葉も知らないべいびーだったので、当時を知る由もありませんんが、こちらのブログで温度感を推し量れます。
PHP5の例外機能の使い方 - Blog::koyhoge::Tech
当時のExceptionの拡張はこのような感じです。
<?php /** * Define a custom exception class */ class MyException extends Exception { // Redefine the exception so message isn't optional public function __construct($message, $code = 0) { // some code // make sure everything is assigned properly parent::__construct($message, $code); } // custom string representation of object public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } public function customFunction() { echo "A custom function for this type of exception\n"; } }
PHP5.3 ~例外がネストできるように~
PHP5.3から、例外がネストできるようになります。例外のネスト...?という感じですが、直前の例外の情報を持った例外が作れるようになっただけです。
PHPのDocからの引用になりますが、Exceptionクラスの第3引数にpreviousを取れるようになっています。
<?php /** * Define a custom exception class */ class MyException extends Exception { // Redefine the exception so message isn't optional public function __construct($message, $code = 0, Exception $previous = null) { // some code // make sure everything is assigned properly parent::__construct($message, $code, $previous); } // custom string representation of object public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } public function customFunction() { echo "A custom function for this type of exception\n"; } }
PHP 5.3で追加された例外のうんたらかんたら - ゆっくり*ゆっくり
PHP7 ExceptionクラスがThrowableの実装になる
PHP7からはThrowableというインターフェースが作られ、ExceptionはThrowableの実装に変わりました。
といっても、Throwableの実装を独自に行うことはできないため、Exceptionクラスを継承し独自クラスを作る形は変わりません。
PHP のクラスが Throwableインターフェイスを直接実装することはできません。 そのかわりに、Exception を継承する必要があります。
追いきれていないもの
この辺のErrorなどの詳細の歴史は割愛します。