けいブログ

プログラミング勉強中、サッカーがないと生きていけない大学生のブログ

PHPメモ:例外処理

 

PHPの例外処理についてざっくり整理しました。

 

例外処理

例外処理とは

意図しないエラーが起きたときにどう対応するかを書く処理のこと。
 

例外処理のメリット

例外処理を使うことでプログラムの処理とエラーの処理を分けることができるのでわかりやすい。
PHPではエラーが起きたときに自動的にエラーメッセージを表示したり後続の処理を止めたりしてくれるが、例外処理ではそれらの処理を自分で制御できる。
 

使い所

  • ファイルが存在しないとき
  • データベースの接続に失敗したとき
  • SQLの構文がエラー
  • 0で割り算を行うとき

 など

 

書き方

try{

//例外が発生する可能性のある処理

throw new Exception('例外発生');

// 後続の処理

} catch(Exception $e){

// 例外が発生したときの処理
 
//例外メッセージを表示する
echo $e->getMessage();

}

 

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のインスタンスを生成することでコンストラクタを呼び出し、例外の情報が入ったオブジェクトを作る。

コンストラクタの引数には例外メッセージ、例外コード、以前に使われた例外を指定できる。

 

オブジェクトについてはそのうち記事を書きます。

 

まとめ

例外処理の流れをまとめると大まかに

  1. tryで例外発生
  2. throwで例外メッセージなどを指定した例外クラスのインスタンスを作り、インスタンス(例外)を投げる
  3. catchでインスタンス(例外)を受け取って変数に入れる
  4. catchの中の処理が実行される

といった感じ。

 

参考

https://www.php.net/manual/ja/language.exceptions.php

https://www.php.net/manual/ja/class.exception.php

 

【PHP超入門】クラス~例外処理~PDOの基礎 - Qiita