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 />
'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) }
{<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
더 자세한 [마른 정보 공유]를 원하시면 제 개인 구독 계정을 팔로우해주세요.