ホームページ >php教程 >php手册 >PHP例外をキャッチして処理する

PHP例外をキャッチして処理する

WBOY
WBOYオリジナル
2016-08-10 08:49:021270ブラウズ

PHP 例外をキャッチして処理します ~

システムには例外処理が付属しています<?php<br /> header("コンテンツタイプ:text/html;charset=utf-8");<br /> 試してみてください<br /> {<br /> //業務処理エラーが発生した場合に例外がスローされる。 <br /> $年齢 = 130;<br /> If ($age > 120) {<br /> 新しい例外をスローします(「年齢は120歳を超えることはできません。」, 1001);<br /> }<br /> } catch (例外 $e) {<br /> $err = [<br /> 「コード」 => $e->getCode(),<br> 'msg' => $e->getMessage(),<br> 'ファイル' => $e->getFile(),<br> 'ライン' => $e->getLine()<br> ];<br> エコー json_encode($err);<br> }<br> <br> 出力: {"code":1001,"msg":"u5e74u9f84u4e0du80fdu5927u4e8e120u5c81u3002","file":"/data/mi/demo.php","line":11}カスタム例外処理<?php <br /> header("コンテンツタイプ:text/html;charset=utf-8");<br /> クラス proException は Exception を拡張します<br /> {<br /> // ビジネスニーズに応じてメソッドをカスタマイズします<br /> /**<br /> * エラーメッセージを取得します<br /> * @param int $type type 1=json 2=array<br /> * @return 配列<br /> ​​*/<br /> パブリック関数 getErrorInfo($type = 2)<br /> {<br /> $err = [<br /> 「コード」 => $this->getCode(),<br> 'メッセージ' = & gt; getMessage (), <br>;                                                                                                                                                                                                     「ライン」 => $this->getLine()<br> ];<br> If ($type == 1) {<br> return json_encode($err);<br> }<br> 戻る }<br> }<br> <br> 試してみてください<br> {<br> //業務処理エラーが発生した場合に例外がスローされる。 <br> $年齢 = 130;<br> If ($age > 120) {<br> throw new proException('年齢は 120 歳を超えることはできません。', 1001);<br> }<br> } catch (proException $e) {<br> $info = $e->getErrorInfo();<br> var_dump($info);<br> }<br> <br> 出力: array(4) { ["code"]=> int(1001) ["msg"]=> string(27) "年齢は 120 歳を超えることはできません。" string(17 ) "/data/mi/demo.php" ["line"]=> int(53) }<br><br>複数の例外をキャッチします header("コンテンツタイプ:text/html;charset=utf-8"); クラス proException は Exception を拡張します<br /> {<br /> // ビジネスニーズに応じてエラーメソッドをカスタマイズします<br /> <br /> /**<br /> * エラーメッセージを取得します<br /> * @param int $type type 1=json 2=array<br /> * * @戻り配列<br /> ​​*/<br /> パブリック関数 getErrorInfo($type = 2)<br /> {<br /> $err = [<br />「コード」 => $this->getCode(),<br> 'メッセージ' = & gt; getMessage (), <br>;                                                                                                                                                                                                     「ライン」 => $this->getLine()<br> ];<br> If ($type == 1) {<br> return json_encode($err);<br> }<br> 戻る }<br> }<br> <br> 試してみてください<br> {<br> If ($_GET['age'] > 100) {<br> throw new proException('カスタマイズされた例外処理', 1002);<br> } その他 {<br> Throw new Exception('システムの例外処理', 1002);<br> }<br> } catch (proException $e) {<br> $info = $e->getErrorInfo();<br> var_dump($info);<br> } catch (例外 $e) {<br> エコー $e->getMessage();<br> }<br> <br> ?age=110 出力: array(4) { ["code"]=> int(1002) ["msg"]=> string(24) "カスタマイズされた例外処理" ["file"]=> 17) "/data/mi/demo.php" ["line"]=> int(64) }<br>; ?age=20 出力: システム例外処理。 <br><br>ロギング<b>//エラー出力を無効にする</b> エラー報告(0);<code class="prettyprint linenums lang-php"> //エラーハンドラーを設定します<br> set_error_handler('errorHandler');<br> //スクリプトの最後に実行する関数<br> register_shutdown_function('fatalErrorHandler');<br> <br> /**<br> * エラー処理<br> * @param int $err_no エラーコード<br> * @param string $err_msg エラーメッセージ<br> * @param string $err_file エラーファイル<br> * @param int $err_line エラー行番号<br> * @戻り文字列<br> ​*/<br> 関数 errorHandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0)<br> {<br> $log = [<br> '['.date('Y-m-d h-i-s').']',<br> '|',<br> $err_no,<br> '|',<br> $err_msg,<br> '|',<br> $err_file,<br> '|',<br> $err_line<br> ];<br> $log_path = '/data/mi/test.txt';<br> error_log(implode(' ',$log)."rn",3, $log_path);<br> //echo implode(' ',$log)."<br>";<br> }<br> <br> /**<br> * 致命的なエラーをキャッチ<br> * @戻り文字列<br> ​*/<br> 関数 FatalErrorHandler() {<br> $e = error_get_last();<br> スイッチ ($e['type']) {<br> ケース 1:<br> errorHandler($e['type'], $e['message'], $e['file'], $e['line']);<br> 休憩;<br> }<br> }<br> <br> クラスDemoClass_1<br> {<br> パブリック関数index()<br>{<br> //ここで警告エラーが発生したため、errorHandler を開始します<br> echo $unknownVariable;<br> }<br> }<br> <br> $demo_1 = 新しい DemoClass_1();<br> // ここで警告エラーが発生し、errorHandler によってキャプチャされました<br> $demo_1->index();<br> //致命的なエラーが発生し、スクリプトの実行が停止し、fatalErrorHandler がトリガーされます<br> $demo_2 = 新しい DemoClass_2();<br> $demo_2->index();<br> <br> エコーをオンにした後、出力: <br> [2016-08-07 09-01-34] | 未定義の変数: /data/mi/demo.php | [2016-08-07 09-01-34] 1 | クラス 'DemoClass_2' が見つかりません | 1. register_shutdown_function は、API デバッグでも使用して、各リクエスト値と戻り値を記録し、デバッグを容易にすることができます。 <br> 2. 「|」を使用して分割する利点は、ログの分割に awk を使用すると便利であることです。
出典: http://mp.weixin.qq.com/s?__biz=MjM5NDM4MDIwNw==&mid=2448834645&idx=1&sn=32c96f1344a270755a8e33a6f7ddc1e8#rd

もっと[辛口な情報共有]をしたい場合は、私の個人購読アカウントをフォローしてください。




PHP例外をキャッチして処理する

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。