PHPメモ:例外処理
PHPの例外処理についてざっくり整理しました。
例外処理
例外処理とは
例外処理のメリット
使い所
- ファイルが存在しないとき
- データベースの接続に失敗したとき
- SQLの構文がエラー
- 0で割り算を行うとき
など
書き方
例
try
tryの中に例外が発生する可能性のある処理を書く。
throw new 例外クラス名(引数)
tryの中に処理を書くだけだと、どこで例外が発生するかわからないのでthrowで例外が発生する場所を明示する。例外を知らせることを例外を投げるという。例外が投げられたらthrowの後に処理が続いていたとしても実行せずにcatchに飛ぶ。
throwでは例外クラス名(例のコードはException)のインスタンスを作成している。変数にはまだ入れていない。
インスタンスを作成するときに第一引数に指定した文字は例外メッセージにあたる。
PDOでデータベースに接続する際は、データベースの接続が失敗した場合、PDO::construct()がPDOExceptionを投げる。
PDOについては別で書きます。
catch (例外クラス名 例外を受け取る変数名)
throwで投げられた例外をcatchで捕捉する。投げられた例外はインスタンスなので、変数(例のコードでは$e)に入れる。
例外を受け取る変数名は何でも構わないが慣習的に$eが使われる。
throwでインスタンスを作り、catchでインスタンスを変数に入れるという2段階の処理。
$e->getMessage()
$eに代入されたインスタンスのgetMessageメソッドにアクセスしている。getMessageメソッドはインスタンスを作成したときに第一引数に指定した例外メッセージを取得する。
例のコードでは例外発生という文字列を取得して表示する。
Exception
Exceptionは例外の基底クラス。Exceptionのインスタンスを生成することでコンストラクタを呼び出し、例外の情報が入ったオブジェクトを作る。
コンストラクタの引数には例外メッセージ、例外コード、以前に使われた例外を指定できる。
オブジェクトについてはそのうち記事を書きます。
まとめ
例外処理の流れをまとめると大まかに
- tryで例外発生
- throwで例外メッセージなどを指定した例外クラスのインスタンスを作り、インスタンス(例外)を投げる
- catchでインスタンス(例外)を受け取って変数に入れる
- catchの中の処理が実行される
といった感じ。
参考
https://www.php.net/manual/ja/language.exceptions.php
https://www.php.net/manual/ja/class.exception.php
【PHP超入門】クラス~例外処理~PDOの基礎 - Qiita