MW211 EXIT

devlog
PHP/try&catchのサブ関数化
2011年10月22日
元々、こんな感じでtry&catchな処理を行っているとする。
┌──────────────────────────────────────┐
│public function メソッド() {                                                │
│  try {                                                                     │
│    $dbh = new PDO(…);                                                     │
│  } catch (PDOException $e){                                                │
│    echo $e->getMessage();                                                  │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
だけど、一部、サブ関数化(サブメソッド化)して他に持っていきたい場合がある。
例えばこんな感じ。
┌──────────────────────────────────────┐
│public function メソッド() {                                                │
│  try {                                                                     │
│    $dbh = $this->サブメソッド;                                             │
│  } catch (PDOException $e){                                                │
│    echo $e->getMessage();                                                  │
│  }                                                                         │
│}                                                                           │
├──────────────────────────────────────┤
│public function サブメソッド() {                                            │
│  $dbh = new PDO(…);                                                       │
│  return $dbh;                                                              │
│}                                                                           │
└──────────────────────────────────────┘
でもtryの中身を他に持っていくと、catchができなくなる。
メイン側で、サブ関数から戻ってきた直後にエラー判定して、
疑似的にエラーにして、catchに拾ってもらう?
いやいや、そんな面倒なことはしなくてよい。
「throw」してやればいいのだ。
┌──────────────────────────────────────┐
│public function メソッド() {                                                │
│  try {                                                                     │
│    $dbh = $this->サブメソッド;                                             │
│  } catch (PDOException $e){                                                │
│    echo $e->getMessage();                                                  │
│  }                                                                         │
│}                                                                           │
├──────────────────────────────────────┤
│public function サブメソッド() {                                            │
│  try {                                                                     │
│    $dbh = new PDO(…);                                                     │
│  } catch (PDOException $e){                                                │
│    throw $e;                                                               │
│  }                                                                         │
│  return $dbh;                                                              │
│}                                                                           │
└──────────────────────────────────────┘
エラー情報のたらいまわしですな。
分類:PHP