PHPのコードがエクセプションをキャッチしてくれない!
と3日ぐらいばたばたしてしまいました。
以下のコード(抜粋)、おかしいところないでしょう。ないですよね?(あるんですけど)
<?php try { $response = $request->send(); } catch (Exception $e) { echo "FAILED[$trial]: $url\n"; }
これが何故通らないのか、実際にはコマンドラインから走らせているので、スタックトレースはいて終了してしまうのです。何で!?と嘆いて悶絶して3日目。
原因がわかりました。上のコードだけ見てもわかんないです。このコードは名前空間を指定していたのです。原因は、
<?php } catch (\Exception $e) {
Exceptionはグローバルに属しているものだから、\が必要だったんですね。言われてみれば納得。
しかし次の疑問。なんでcatch(Exception ...)がエラーにならないのだろうか?この名前空間で定義もしていないExceptionを使っている段階でエラー出してくれてもよいだろうに。