【php】部分的にtry catchを使いたい時
問題
プログラム全体で、すでにエラーハンドラが設定されていて、エラー時例外が飛ばないように書かれている中で、部分的に try catch を使いたい。
答え
<?php // エラーハンドラで一時的にエラーを例外に変換 set_error_handler(function($errno, $message, $file, $line) { if(!($errno & error_reporting())) return true; throw new ErrorException($message, 0, $errno, $file, $line); }); // ここでは例外が飛ぶ try { ... } catch (Exception $ex) { ... } // エラーハンドラの内容をひとつ前(元)に戻す restore_error_handler();
・PDOの場合
<?php // エラーハンドラで一時的にエラーを例外に変換 set_error_handler(function($errno, $message, $file, $line) { if(!($errno & error_reporting())) return true; throw new ErrorException($message, 0, $errno, $file, $line); }); // ↓ PDOでのDBエラーも例外で飛ばす $pdo = new PDO("~~~"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { ... } catch (Exception $ex) { ... } // エラーハンドラの内容をひとつ前(元)に戻す restore_error_handler(); // PDOのエラーモードも戻す(*) $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENTなど);
コメント