Maison > php教程 > php手册 > PHP异常的捕获及处理

PHP异常的捕获及处理

WBOY
Libérer: 2016-08-10 08:49:02
original
1269 Les gens l'ont consulté

PHP异常的捕获及处理 ~

系统自带异常处理<?php <br /> header("Content-type:text/html;charset=utf-8");<br> try<br> {<br>     //业务处理 错误时抛出异常。<br>     $age = 130;<br>     if ($age > 120) {<br>         throw new Exception('年龄不能大于120岁。', 1001);<br>     }<br> } catch (Exception $e) {<br>     $err = [<br>         'code' => $e->getCode(),<br>         'msg'  => $e->getMessage(),<br>         'file'    => $e->getFile(),<br>         'line'   => $e->getLine()<br>     ];<br>     echo json_encode($err);<br> }<br> <br> 输出:{"code":1001,"msg":"\u5e74\u9f84\u4e0d\u80fd\u5927\u4e8e120\u5c81\u3002","file":"\/data\/mi\/demo.php","line":11}自定义异常处理<?php <br /> header("Content-type:text/html;charset=utf-8");<br> class proException extends Exception<br> {<br>     //根据业务需求,自定义方法<br>     /**<br>      * 获取错误信息<br>      * @param int $type 类型 1=json 2=数组<br>      * @return array<br>      */<br>     public function getErrorInfo($type = 2)<br>     {<br>         $err = [<br>             'code' => $this->getCode(),<br>             'msg'  => $this->getMessage(),<br>             'file'    => $this->getFile(),<br>             'line'   => $this->getLine()<br>         ];<br>         if ($type == 1) {<br>             return json_encode($err);<br>         }<br>         return $err;<br>     }<br> }<br> <br> try<br> {<br>     //业务处理 错误时抛出异常。<br>     $age = 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岁。" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(53) }捕捉多个异常<?php <br /> header("Content-type:text/html;charset=utf-8");<br> class proException extends Exception<br> {<br>     //根据业务需求,自定义错误方法<br> <br>     /**<br>      * 获取错误信息<br>      * @param int $type 类型 1=json 2=数组<br>      * @return array<br>      */<br>     public function getErrorInfo($type = 2)<br>     {<br>         $err = [<br>             'code' => $this->getCode(),<br>             'msg'  => $this->getMessage(),<br>             'file'    => $this->getFile(),<br>             'line'   => $this->getLine()<br>         ];<br>         if ($type == 1) {<br>             return json_encode($err);<br>         }<br>         return $err;<br>     }<br> }<br> <br> try<br> {<br>     if ($_GET['age'] > 100) {<br>         throw new proException('自定义的异常处理', 1002);<br>     } else {<br>         throw new Exception('系统的异常处理', 1002);<br>     }<br> } catch (proException $e) {<br>     $info =  $e->getErrorInfo();<br>     var_dump($info);<br> } catch (Exception $e) {<br>     echo $e->getMessage();<br> }<br> <br> ?age=110 输出:array(4) { ["code"]=> int(1002) ["msg"]=> string(24) "自定义的异常处理" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(64) }<br> ?age=20 输出:系统的异常处理。日志记录//禁止错误输出<br> error_reporting(0);<br> //设置错误处理器<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>  * @return string<br>  */<br> function 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)."\r\n",3, $log_path);<br>     //echo implode(' ',$log)."<br>";<br> }<br> <br> /**<br>  * 捕捉致命错误<br>  * @return string<br>  */<br> function fatalErrorHandler() {<br>     $e = error_get_last();<br>     switch ($e['type']) {<br>         case 1:<br>             errorHandler($e['type'], $e['message'], $e['file'], $e['line']);<br>             break;<br>     }<br> }<br> <br> class DemoClass_1<br> {<br>     public function index()<br>     {<br>         //这里发生一个警告错误,出发errorHandler<br>         echo $undefinedVarible;<br>     }<br> }<br> <br> $demo_1 = new DemoClass_1();<br> //这里发生一个警告错误,被errorHandler 捕获<br> $demo_1->index();<br> //发生致命错误,脚本停止运行触发 fatalErrorHandler<br> $demo_2 = new DemoClass_2();<br> $demo_2->index();<br> <br> 打开echo后 输出:<br> [2016-08-07 09-01-34] | 8 | Undefined variable: undefinedVarible | /data/mi/demo.php | 126<br> [2016-08-07 09-01-34] | 1 | Class 'DemoClass_2' not found | /data/mi/demo.php | 134备注:
1. register_shutdown_function 也可以用于API调试中,记录每次请求值和返回值,方便调试。
2. 利用 “|” 分割的好处是,便于利用 awk 对日志进行分割处理。

来源:http://mp.weixin.qq.com/s?__biz=MjM5NDM4MDIwNw==&mid=2448834645&idx=1&sn=32c96f1344a270755a8e33a6f7ddc1e8#rd

更多【干货分享】,请关注我的个人订阅号。

PHP异常的捕获及处理

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal