pen00log

しがないwebエンジニアです

例外処理ってなんだろう

例外処理ってなあに。
 データベースへの画像アップロード→PHPで表示する方法について調べていたら、
RuntimeExceptionというものに遭遇してこれは何?と思ったので少し調べてみました。


例外処理って?

 ざっくり言うと、
エラーが起こるんじゃないかなって予想がつく処理には、実際にエラーが起きた時に
そのエラーが起きた原因を明確にできるようにあらかじめ準備しておく
ってことだと思います。
 ゴルフで言うと(なぜ)、意図せず人にボールをぶつけてしまった時のために
ゴルフ保険に入っておくみたいな?
私はドライバーフルスイングで50ヤードしか飛びませんが・・・笑
そんな感じで、エラーが起こった時にそのエラーについて
メッセージを表示させることだと理解しました。

一番簡単な型としては

<?php
    try{
        エラーが起こる可能性のある処理
    
    }
    catch(Exception $e){
        //エラーメッセージを表示させる
        exit($e->getMessage());

    }
?>

かな?


私がPDO接続の時に何も考えずおまじないとして使ってたこのtry-catchも

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    $dbh = null;
} catch (PDOException $e) {
     print('Error:'.$e->getMessage());
     die();
}
?>

PDOの接続時に起きたエラーに限定した例外処理を行っていたということだったのだ。
知らなかった!笑

PDOExceptionみたいに、Exceptionはいろんなクラスがあって
RuntimeExceptionは実行時にだけ発生するようなエラーの際にスローするものということでした。
だから、ユーザーがアップロードしようとした画像や動画に問題があった場合に
「サイズが大きすぎます」、「ファイル形式が対応していません」
といったメッセージを出すために使っているというわけか!


わからないこと

 調べた上でさらに疑問点が二つ。

  • tryの中でのスロー(throw new Exception();)は絶対じゃないの?
     いろんなコードを見ているとスローしてる場合とそうじゃない場合があるんです。
     なぜだろう。

  • Exceptionにいろいろ仲間(クラス)がいることはわかったけれど、
    なぜ使い分ける必要があるの?
     Exeption()で全部まかなってはいけないんでしょうか?



一重に例外処理といってもいろいろな書き方ができるんだなあということを学びました。

参考記事

PHPでの例外処理の方法:try...catch, throw | UX MILK

PHPの例外(Exception) | kudox.jp

PHP: RuntimeException - Manual