foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

PHP5 catch に未定義クラスを書いてもエラーにならない

PHP5 の catch では、未定義クラスを書いてもエラーになりません。
yandod さんのCakePHPの何かを拝見して、今さらながら知りました。
クラス名や関数名は「その場所を通らないと」評価されない、というイメージを持っています。
例えば、こんな風に。

<?php
if(false && new UndefinedClass()){  // エラーにならない。
}
?>

catch で見落としてしまうのは↓というイメージを持っているからです。

  • 派生クラスの例外が throw された場合、既定クラス名の catch はスキップされる。
  • どの catch 節に飛ぶか判定するために上から順に catch クラス名を見ている(はず)。

でも、現実にはエラーにならない。
だとすると catch でマッチするのは

ということなのかな〜と想像してます。