您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關PHP中怎么捕獲異常并處理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
<?php
header("Content-type:text/html;charset=utf-8");
try
{
//業務處理 錯誤時拋出異常。
$age = 130;
if ($age > 120) {
throw new Exception('年齡不能大于120歲。', 1001);
}
} catch (Exception $e) {
$err = [
'code' => $e->getCode(),
'msg' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine()
];
echo json_encode($err);
}
輸出:{"code":1001,"msg":"\u5e74\u9f84\u4e0d\u80fd\u5927\u4e8e120\u5c81\u3002","file":"\/data\/mi\/demo.php","line":11}
自定義異常處理
<?php
header("Content-type:text/html;charset=utf-8");
class proException extends Exception
{
//根據業務需求,自定義方法
/**
* 獲取錯誤信息
* @param int $type 類型 1=json 2=數組
* @return array
*/
public function getErrorInfo($type = 2)
{
$err = [
'code' => $this->getCode(),
'msg' => $this->getMessage(),
'file' => $this->getFile(),
'line' => $this->getLine()
];
if ($type == 1) {
return json_encode($err);
}
return $err;
}
}
try
{
//業務處理 錯誤時拋出異常。
$age = 130;
if ($age > 120) {
throw new proException('年齡不能大于120歲。', 1001);
}
} catch (proException $e) {
$info = $e->getErrorInfo();
var_dump($info);
}
輸出:array(4) { ["code"]=> int(1001) ["msg"]=> string(27) "年齡不能大于120歲。" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(53) }
捕捉多個異常
<?php
header("Content-type:text/html;charset=utf-8");
class proException extends Exception
{
//根據業務需求,自定義錯誤方法
/**
* 獲取錯誤信息
* @param int $type 類型 1=json 2=數組
* @return array
*/
public function getErrorInfo($type = 2)
{
$err = [
'code' => $this->getCode(),
'msg' => $this->getMessage(),
'file' => $this->getFile(),
'line' => $this->getLine()
];
if ($type == 1) {
return json_encode($err);
}
return $err;
}
}
try
{
if ($_GET['age'] > 100) {
throw new proException('自定義的異常處理', 1002);
} else {
throw new Exception('系統的異常處理', 1002);
}
} catch (proException $e) {
$info = $e->getErrorInfo();
var_dump($info);
} catch (Exception $e) {
echo $e->getMessage();
}
?age=110 輸出:array(4) { ["code"]=> int(1002) ["msg"]=> string(24) "自定義的異常處理" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(64) }
?age=20 輸出:系統的異常處理。
日志記錄
//禁止錯誤輸出
error_reporting(0);
//設置錯誤處理器
set_error_handler('errorHandler');
//在腳本結束時運行的函數
register_shutdown_function('fatalErrorHandler');
/**
* 錯誤處理
* @param int $err_no 錯誤代碼
* @param string $err_msg 錯誤信息
* @param string $err_file 錯誤文件
* @param int $err_line 錯誤行號
* @return string
*/
function errorHandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0)
{
$log = [
'['.date('Y-m-d h-i-s').']',
'|',
$err_no,
'|',
$err_msg,
'|',
$err_file,
'|',
$err_line
];
$log_path = '/data/mi/test.txt';
error_log(implode(' ',$log)."\r\n",3, $log_path);
//echo implode(' ',$log)."<br>";
}
/**
* 捕捉致命錯誤
* @return string
*/
function fatalErrorHandler() {
$e = error_get_last();
switch ($e['type']) {
case 1:
errorHandler($e['type'], $e['message'], $e['file'], $e['line']);
break;
}
}
class DemoClass_1
{
public function index()
{
//這里發生一個警告錯誤,出發errorHandler
echo $undefinedVarible;
}
}
$demo_1 = new DemoClass_1();
//這里發生一個警告錯誤,被errorHandler 捕獲
$demo_1->index();
//發生致命錯誤,腳本停止運行觸發 fatalErrorHandler
$demo_2 = new DemoClass_2();
$demo_2->index();
打開echo后 輸出:
[2016-08-07 09-01-34] | 8 | Undefined variable: undefinedVarible | /data/mi/demo.php | 126
[2016-08-07 09-01-34] | 1 | Class 'DemoClass_2' not found | /data/mi/demo.php | 134
備注:
1. register_shutdown_function 也可以用于API調試中,記錄每次請求值和返回值,方便調試。
2. 利用 “|” 分割的好處是,便于利用 awk 對日志進行分割處理。
以上就是PHP中怎么捕獲異常并處理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。