20081120 lt11th ace

732 views
656 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
732
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20081120 lt11th ace

  1. 1. ACあなたとは      E違うんです     エラー処理 2008年11月20日(木) 第11回Lightning Talk 林 正紀 id:m_norii
  2. 2. というわけで PHPのエラー処理のお話です
  3. 3. ところで エラー処理ちゃんとしてますか?
  4. 4. CASE1 : 放置$filename が存在しないとE_WARNINGが出る
  5. 5. CASE2 : 黙殺E_WARNINGうざいからとりあえず抑制した。。。
  6. 6. 論外
  7. 7. CASE3 : 比較的まともな例・ファイルの存在チェックをしてる・各関数でFALSEが返ってきた場合をケア
  8. 8. でも、いちいちif(($handle=fopen($file))===FALSE) とか or die(’Error!’) とか面倒。
  9. 9. なのでエラーハンドラを 使いましょう
  10. 10. 定義側:利用側:詳しい使い方はPHPマニュアル参照。
  11. 11. CASE4:PEARのエラー処理
  12. 12. てか、PEAR::isError() ばっかでうざいし。。。orz
  13. 13. でも大丈夫!
  14. 14. PEARにもエラーハンドリング機構が あるよ(^^)v
  15. 15. PEAR::setErrorHandling()
  16. 16. あとはさっきの要領で、ErrorHandlerクラスにエラー時に実行するhandlePEARError() メソッドを定義するだけ。→エラー処理が消えて、読みやすい  ソースコードになったよ!
  17. 17. ところで
  18. 18. PEARって「クラス」ライブラリ ですよね?
  19. 19. だったら エラーも 「例外」で処理しませんか? PHP5限定だけど・・・
  20. 20. PEAR_ErrorをPEAR_Exceptionに 詰め替えてthrowするラッパを作る※元ネタは [PHP-users 25583]のMLより。
  21. 21. さらにPHPのデフォルト例外ハンドラも 定義しておく
  22. 22. そして、利用する時はこんな感じ。
  23. 23. あとは、 冒頭のset_error_handler(); とかも、auto_prepend_file に指定して コードから追い出しちゃう ・・・って手もありますが。 ・・・そこは好き好きに。(^^;;;
  24. 24. まだまだエラー処理について 語るべきことは 多いのですが・・
  25. 25. たぶんタイムアップ寸前なので (^^;;; ・・・さわりだけ
  26. 26. 【大事なこと1】 Webページのエラー処理とコマンドラインのエラー処理は ちゃんとわける maillog に HTMLのエラーページが出力 されてるとか、ありえないし。。。orz
  27. 27. 【大事なこと2】エラー処理は、最初に設計・実装! いわゆる「横断的関心事」だから、 後で付け足そうと思うと結構めんどくさいので。
  28. 28. 【大事なこと3】php.iniの設定、要確認!! 本番環境で display_errors = On とか はずかしいぞ!
  29. 29. 【大事なこと4】ApacheのErrorDocumentも 準備しておこう デフォルトのエラーページはかっこわるい (もちろんセキュリティ・ユーザビリティ的にも 好ましくない)
  30. 30. ご静聴ありがとうございました

×