PHP7の例外(Exception)の関係、正しく例外を使いましょう。Webエンジニアの日常とリーグオブレジェンドスマートフォン用の表示で見るWebエンジニアの日常とリーグオブレジェンドWebエンジニアとして働いている猫のブログ。EmacsとMySQLとリーグオブレジェンド(LoL)が好物。技術的な記事かLoLの記事を書く。PHP7の例外(Exception)の関係、正しく例外を使いましょう。2018-11-15PHP7の例外(Exception)の関係、正しく例外を使いましょう。php7TweetThorowableErrorExceptionRuntimeExceptionLogicExceptionまとめPHP7の例外のうちよく使う例外と構造は以下の通りです。ThorwableErrorExceptionRuntimeExceptionLogicExceptionもっと詳細な図は以下の記事を見るとわかりやすいです。qiita.comThorowableThrowableはすべての例外の基底クラスで、PHP7から新しくできました。PHP5ではキャッチできなかった例外もキャッチできます。Throwableをtry-catchでキャッチするのはあまり良いとは言えません。構文エラーやロジックのエラーなど、本来コード修正を入れるべきエラーもキャッチしてしまうからです。ThrowableはErrorとExceptionに別れます。ErrorPHP5まではキャッチできなかったタイプの例外です。ParseErrorやTypeErrorなどがErrorに含まれます。ErrorはPHPの文法エラー等によって起こるものなので、基本的にはtry-catchでキャッチすべきではありません。「コードの書き方が間違っている」時に発生する例外ですので、キャッチするのではなくコードを修正してください。ExceptionPHP5まででもキャッチできた例外です。Exceptionの子クラスには以下のようなクラスがあります。RuntimeExceptionLogicException大きく分けて「RuntimeException」と「RuntimeException以外」があると思っていれば十分で、RuntimeException以外でよく使うのはLogicExceptionです。するべきではありません。キャッチすべき例外はRuntimeExceptionとその子クラスで、それ以外の例外は「コードが間違っている」例外になるので、コードを修正するべきなのです。RuntimeException「データベースに接続しようとしたけどホストが落ちていてつながらなかった」「ユーザーからの入力値が不正な値だった」といった実行時に発生する例外がRuntimeExceptionです。コードが正常でも発生する可能性があり、実行時になって初めて発生するかどうかが決まる例外で、キャッチして何らかの例外処理をすることが期待されています。RuntimeExceptionをキャッチして「ただいまシステムエラーが起きています。復旧までしばらくお待ち下さい」という表示を出す。RuntimeExceptionを継承したクラスMaintenanceExceptionを実装し、MaintenanceExceptionをキャッチした場合は「ただいまメンテナンス中です」の表示を出す。PHPに標準で実装されているUnexpectedValueException(RuntimeExceptionを継承している)をキャッチし、「正しいメールアドレスを入力してください」などとユーザーにメッセージを出す。RuntimeException以外をキャッチしているコードは何かが間違っていると感上げて良いです。LogicExceptionExceptionの子クラスで、「ロジックが間違っている」ことを表す例外です。「ユーザーIDが正の整数で渡されることが期待されているのに負の値が来た」などの例外です。利用するのが良いでしょう。本来負の値が来るはずが無い箇所で負の値が届いているので、コードが誤っているということになります。コードを修正しましょう。まとめRuntimeExceptionはキャッチするべき例外。それ以外はキャッチするべきではない例外。コードが間違っているので修正しましょう。キャッチする時だけでなく、スローする時も例外を正しく使いましょう。10:32PHP7の例外(Exception)の関係、正しく例外を使いましょう。(2)月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。