摘要:系統自帶異常處理業務處理錯誤時拋出異常。輸出自定義異常處理根據業務需求,自定義方法獲取錯誤信息類型數組業務處理錯誤時拋出異常。年齡不能大于歲。利用分割的好處是,便于利用對日志進行分割處理。
系統自帶異常處理
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":"u5e74u9f84u4e0du80fdu5927u4e8e120u5c81u3002","file":"/data/mi/demo.php","line":11}
自定義異常處理
$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) }
捕捉多個異常
$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)." ",3, $log_path); //echo implode(" ",$log)."
"; } /** * 捕捉致命錯誤 * @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
備注:
register_shutdown_function 也可以用于API調試中,記錄每次請求值和返回值,方便調試。
利用 “|” 分割的好處是,便于利用 awk 對日志進行分割處理。
Thanks ~
AD:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21849.html
摘要:的方法在中,提供了方法來拋出異常。總結關于生成器的異常處理,這里來進行一下總結。最近在研究使用實現半協程,而這個過程中,對異常的處理,是非常重要的。但是的運行方式決定了異常處理比較難以理解。 本文是我在研究 PHP 異步編程時的總結。對于相當多的 PHPer 來說,可能都不知道 Generator,或者對 Generaotr 的流程不是很熟悉。因為 Generator 使得程序不再是順...
摘要:一的幾個函數異常捕獲自定義處理函數注冊錯誤捕獲自定義處理函數注冊程序執行時異常終止錯誤捕獲處理函數注冊這三個函數在錯誤處理控制中給開發者提供了很大的自主空間,在日志系統中記錄日志信息有他們的功勞。下面要說的類庫是借鑒了日志系統的設計。 引言 接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當的話不會直接拋出一大堆只有程...
閱讀 1802·2023-04-26 00:47
閱讀 1553·2021-11-11 16:55
閱讀 2623·2021-09-27 14:04
閱讀 3560·2021-09-22 15:58
閱讀 3561·2021-07-26 23:38
閱讀 2137·2019-08-30 13:47
閱讀 1988·2019-08-30 13:15
閱讀 1152·2019-08-29 17:09