概要
try catch finallyにてcatch内部でreturnを行っても、必ずfinallyは実行されるらしいことを恥ずかしながら初めて知ったので簡単にまとめる。
内容
PHPの公式ドキュメントには下記のように書かれている
return 文が try や catch ブロックの内部に存在した場合でも、 finally ブロックは実行されます。
catchで例外を再度スローしてもfinallyが実行されることは知っていたが、returnでもfinallyが実行されることは知らなかった。
例えば下記のような処理があったとして、例外をキャッチしたとする。当該の例外がHogeExceptionだった場合、エラーメッセージがreturnされている。このとき一見catchの中でreturnしているので処理は終わりかと思うが、finallyがある場合、必ず実行されるらしい。
try {
// DBへの書き込み処理などなど
} catch (Exception $e) {
if ($e instanceof HogeException) {
return $e->getMessage();
}
throw $e;
} finally {
// クリーンアップなどの後始末処理
}
参考文献