> php教程 > php手册 > PHP 예외 포착 및 처리

PHP 예외 포착 및 처리

WBOY
풀어 주다: 2016-08-10 08:49:02
원래의
1272명이 탐색했습니다.

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":"u5e74u9f84u4e0du80fdu5927u4e8e120u5c81u3002","file":"/data/mi/demo.php","line":11} header("Content-type:text/html;charset=utf-8"); 시도해 보세요<?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 /> &#039;code&#039; => $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) } {<b> //비즈니스 처리 오류가 발생하면 예외가 발생합니다. </b> $나이 = 130;<code class="prettyprint linenums lang-php"> If ($age > 120) {<br>             새로운 예외 발생('나이는 120세를 초과할 수 없습니다.', 1001);<br> }<br> } 잡기(예외 $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}
사용자 정의 예외 처리 header("Content-type:text/html;charset=utf-8"); proException 클래스는 예외를 확장합니다 { //비즈니스 요구에 따라 방법을 맞춤설정하세요 /** * 오류 메시지 받기 * @param int $type 유형 1=json 2=배열 * @return 배열 ​​*/ 공개 함수 getErrorInfo($type = 2) {          $err = [              '코드' =>$this->getCode(), '메시지' = & gt; $ this- & gt; getMessage (), > > '라인' => $this->getLine() ]; If ($type == 1) {                  json_encode($err) 반환;        }           $err 반환 } } 시도해 보세요 { //비즈니스 처리 오류가 발생하면 예외가 발생합니다. $나이 = 130; If ($age > 120) {              throw new proException('나이는 120세를 초과할 수 없습니다.', 1001); } } 잡기 (proException $e) { $info = $e->getErrorInfo(); var_dump($info); } 출력: array(4) { ["code"]=> int(1001) ["msg"]=> "나이는 120세를 초과할 수 없습니다." string(17 ) "/data/mi/demo.php" ["line"]=> int(53) }여러 예외 포착 header("Content-type:text/html;charset=utf-8");<🎜> proException 클래스는 예외를 확장합니다<🎜> {<🎜> //비즈니스 요구에 따라 오류 방법을 사용자 정의<🎜> <🎜> /**<🎜> * 오류 메시지 받기<🎜> * @param int $type 유형 1=json 2=배열<🎜> * @return 배열<🎜> ​​*/<🎜> 공개 함수 getErrorInfo($type = 2)<🎜> {<🎜>          $err = [<🎜>            '코드' =>$this->getCode(),
'메시지' = & gt; $ this- & gt; getMessage (),
> > '라인' => $this->getLine()
];
If ($type == 1) {
                 json_encode($err) 반환;
        }
          $err 반환
}
}

시도해 보세요
{
If ($_GET['age'] > 100) {
Throw new proException('사용자 정의된 예외 처리', 1002);
} 그 밖의 {
새로운 예외 발생('시스템 예외 처리', 1002);
}
} 잡기 (proException $e) {
$info = $e->getErrorInfo();
var_dump($info);
} 잡기(예외 $e) {
echo $e->getMessage();
}

?age=110 출력: array(4) { ["code"]=> int(1002) ["msg"]=> "사용자 정의된 예외 처리" ["file"]=> 17) "/data/mi/demo.php" ["line"]=> int(64) }
?age=20 출력: 시스템 예외 처리.
로깅//오류 출력 비활성화 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 문자열<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> * @return 문자열<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> 공용 함수 인덱스()<br>{<br> ​​​​ //여기서 경고 오류가 발생했습니다. errorHandler를 시작하세요<br>           echo $undefineVarible;<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] 8 | 정의되지 않은 변수: /data/mi/demo.php | [2016-08-07 09-01-34] | 1 | 'DemoClass_2' 클래스를 찾을 수 없습니다. /data/mi/demo.php | 134<br> 1. Register_shutdown_function을 API 디버깅에 사용하여 각 요청 값과 반환 값을 기록하여 디버깅을 용이하게 할 수도 있습니다. 2. "|"를 사용하여 분할하는 장점은 awk를 사용하여 로그를 분할하는 것이 편리하다는 것입니다.

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

더 자세한 [마른 정보 공유]를 원하시면 제 개인 구독 계정을 팔로우해주세요.



PHP 예외 포착 및 처리

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿