[PHP]自作例外で処理を最適化!

PHP

ちょっと複雑な処理をゴリゴリ書いていると例外が欲しくなってきます。
途中で計算がおかしくなった時に処理を中断させたい時とか。
こういう時は自分でtry-catchを書いてthrow new Exceptionしたりすると処理を中断できて便利。

スポンサーリンク

基本的な例外処理

try {
	//----なんかの処理A----
	if($A === FALSE) { //処理A失敗
		throw new Exception();
	}
	
	//----なんかの処理B----
	if($B === FALSE) { //処理B失敗
		throw new Exception();
	}
} catch (Exception $e) {
	echo '失敗したよおおおおおおお';
}

でも、ここでいくつか問題があることに気づきます。

  • なんの処理で失敗したかが分かりにくい
  • 処理A失敗時と処理B失敗時のcatch処理を変えられない

これを解消するため、独自に例外(Exception)を作ってあげます。

独自例外の作り方

今回はWebAPIExceptionという名前で作成してみます。
これはWebAPIを使用して正しい値が返ってこなかった時にthrowしてやったりします。
よく僕が使う手法です。

/**
 * WebAPIとの通信に失敗した場合の例外 
 * 
 */
class WebAPIException extends Exception {
  public function __construct(){
    parent::__construct('WebAPIの接続に失敗しました。', 800);
    //これでもOK
    //$this->code = 800;
    //$this->message = 'WebAPIの接続に失敗しました。';
  }
}

Exceptionクラスを継承して、親のコンストラクタに例外メッセージとコードを渡してやります。
クラス名は任意ですが、名前の後ろにExceptionを付けておくのが一般的です。
また、コードも任意ですが、既存のExcepitonコードと被らないようにしてやります。
親のコンストラクタに渡さなくても直接$this->messageや$this->codeに代入しても大丈夫です。
ただ、極力親のコンストラクタを呼んでやる方が安全だと思います。

あとはこいつを

throw new WebAPIException();

してやれば使えます。

Exceptionクラスの関数

try {
 	//例外をスロー
 	throw new WebAPIException();
} catch (WebAPIException $e){
	echo $e->getCode()."<br>";
	echo $e->getFile()."<br>";
	echo $e->getLine()."<br>";
	echo $e->getMessage()."<br>";
}
●Exception::getCode()
設定したコードを返します。
●Exception::getFile()
ファイル名のフルパスを返します。
●Exception::getLine()
例外の起きた行を返します。
●Exception::getMessage()
設定した例外メッセージを返します。

ということで例外の作り方、意外と簡単なので使ってみてください!

PHP
スポンサーリンク
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
この記事を書いた人

スパイスファクトリー株式会社 Webエンジニア。フロントエンドやWebサイトの高速化が得意です。インフラ・バックエンドも一通りやってます。
個人的なお仕事のご依頼や情報交換などはお問い合わせまたはTwitterにメンションをお願いします。

ShoheiTaiをフォローする
このエントリーが役に立ったらシェアをお願いします!
タイトルとURLをコピーしました