20081120 lt11th ace

30
E C A あなたとは 違うんです エラー処理 20081120() 11Lightning Talk 林 正紀 id:m_norii

Upload: masanori-hayashi

Post on 22-Jul-2015

501 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 20081120 lt11th ace

ECAあなたとは     違うんです

     エラー処理

2008年11月20日(木)第11回Lightning Talk

林 正紀id:m_norii

Page 2: 20081120 lt11th ace

というわけでPHPの

エラー処理のお話です

Page 3: 20081120 lt11th ace

ところでエラー処理

ちゃんとしてますか?

Page 4: 20081120 lt11th ace

CASE1 : 放置

$filename が存在しないとE_WARNINGが出る

Page 5: 20081120 lt11th ace

CASE2 : 黙殺

E_WARNINGうざいからとりあえず抑制した。。。

Page 6: 20081120 lt11th ace

論外

Page 7: 20081120 lt11th ace

CASE3 : 比較的まともな例

・ファイルの存在チェックをしてる・各関数でFALSEが返ってきた場合をケア

Page 8: 20081120 lt11th ace

でも、いちいちif(($handle=fopen($file))===FALSE)

とかor die(’Error!’)

とか面倒。

Page 9: 20081120 lt11th ace

なのでエラーハンドラを

使いましょう

Page 10: 20081120 lt11th ace

定義側:定義側:

利用側:

詳しい使い方はPHPマニュアル参照。

Page 11: 20081120 lt11th ace

CASE4:PEARのエラー処理

Page 12: 20081120 lt11th ace

てか、PEAR::isError()

ばっかでうざいし。。。orz

Page 13: 20081120 lt11th ace

でも大丈夫!

Page 14: 20081120 lt11th ace

PEARにもエラーハンドリング機構が

あるよ(^^)v

Page 15: 20081120 lt11th ace

PEAR::setErrorHandling()

Page 16: 20081120 lt11th ace

あとはさっきの要領で、ErrorHandlerクラスにエラー時に実行する handlePEARError() メソッドを定義するだけ。→エラー処理が消えて、読みやすい  ソースコードになったよ!

Page 17: 20081120 lt11th ace

ところで

Page 18: 20081120 lt11th ace

PEARって「クラス」ライブラリ

ですよね?

Page 19: 20081120 lt11th ace

だったらエラーも「例外」で

処理しませんか?PHP5限定だけど・・・

Page 20: 20081120 lt11th ace

PEAR_ErrorをPEAR_Exceptionに詰め替えてthrowするラッパを作る

※元ネタは [PHP-users 25583]のMLより。

Page 21: 20081120 lt11th ace

さらにPHPのデフォルト例外ハンドラも定義しておく

Page 22: 20081120 lt11th ace

そして、利用する時はこんな感じ。

Page 23: 20081120 lt11th ace

あとは、冒頭のset_error_handler();

とかも、auto_prepend_file に指定して

コードから追い出しちゃう・・・って手もありますが。

・・・そこは好き好きに。(^^;;;

Page 24: 20081120 lt11th ace

まだまだエラー処理について

語るべきことは多いのですが・・

Page 25: 20081120 lt11th ace

たぶんタイムアップ寸前なので

(^^;;;

・・・さわりだけ

Page 26: 20081120 lt11th ace

【大事なこと1】Webページのエラー処理と

コマンドラインのエラー処理はちゃんとわける

maillog に HTMLのエラーページが出力されてるとか、ありえないし。。。orz

Page 27: 20081120 lt11th ace

【大事なこと2】エラー処理は、最初に設計・実装!

いわゆる「横断的関心事」だから、後で付け足そうと思うと結構めんどくさいので。

Page 28: 20081120 lt11th ace

【大事なこと3】php.iniの設定、要確認!!

本番環境で display_errors = On とかはずかしいぞ!

Page 29: 20081120 lt11th ace

【大事なこと4】ApacheのErrorDocumentも

準備しておこうデフォルトのエラーページはかっこわるい(もちろんセキュリティ・ユーザビリティ的にも好ましくない)

Page 30: 20081120 lt11th ace

ご静聴ありがとうございました