摘要:系統(tǒng)自帶異常處理業(yè)務(wù)處理錯(cuò)誤時(shí)拋出異常。輸出自定義異常處理根據(jù)業(yè)務(wù)需求,自定義方法獲取錯(cuò)誤信息類型數(shù)組業(yè)務(wù)處理錯(cuò)誤時(shí)拋出異常。年齡不能大于歲。利用分割的好處是,便于利用對(duì)日志進(jìn)行分割處理。
系統(tǒng)自帶異常處理
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 { //業(yè)務(wù)處理 錯(cuò)誤時(shí)拋出異常。 $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) }
捕捉多個(gè)異常
$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("系統(tǒng)的異常處理", 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 輸出:系統(tǒng)的異常處理。
日志記錄
//禁止錯(cuò)誤輸出 error_reporting(0); //設(shè)置錯(cuò)誤處理器 set_error_handler("errorHandler"); //在腳本結(jié)束時(shí)運(yùn)行的函數(shù) register_shutdown_function("fatalErrorHandler"); /** * 錯(cuò)誤處理 * @param int $err_no 錯(cuò)誤代碼 * @param string $err_msg 錯(cuò)誤信息 * @param string $err_file 錯(cuò)誤文件 * @param int $err_line 錯(cuò)誤行號(hào) * @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)."
"; } /** * 捕捉致命錯(cuò)誤 * @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() { //這里發(fā)生一個(gè)警告錯(cuò)誤,出發(fā)errorHandler echo $undefinedVarible; } } $demo_1 = new DemoClass_1(); //這里發(fā)生一個(gè)警告錯(cuò)誤,被errorHandler 捕獲 $demo_1->index(); //發(fā)生致命錯(cuò)誤,腳本停止運(yùn)行觸發(fā) fatalErrorHandler $demo_2 = new DemoClass_2(); $demo_2->index(); 打開(kāi)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調(diào)試中,記錄每次請(qǐng)求值和返回值,方便調(diào)試。
利用 “|” 分割的好處是,便于利用 awk 對(duì)日志進(jìn)行分割處理。
Thanks ~
AD:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21849.html
摘要:但異常捕獲后程序可以繼續(xù)執(zhí)行,而真正的錯(cuò)誤出現(xiàn)后程序就必須終止異??梢允褂脕?lái)捕獲捕獲,捕獲之后后續(xù)代碼可以繼續(xù)執(zhí)行而錯(cuò)誤是無(wú)法使用捕獲的如果拋出了異常,就必須捕獲它否則程序終止執(zhí)行。 PHP錯(cuò)誤級(jí)別 Parse error > Fatal Error > Waning > Notice > Deprecated Deprecated 最低級(jí)別的錯(cuò)誤(不推薦,不建議)使用一些過(guò)期函數(shù)的...
摘要:的方法在中,提供了方法來(lái)拋出異常??偨Y(jié)關(guān)于生成器的異常處理,這里來(lái)進(jìn)行一下總結(jié)。最近在研究使用實(shí)現(xiàn)半?yún)f(xié)程,而這個(gè)過(guò)程中,對(duì)異常的處理,是非常重要的。但是的運(yùn)行方式?jīng)Q定了異常處理比較難以理解。 本文是我在研究 PHP 異步編程時(shí)的總結(jié)。對(duì)于相當(dāng)多的 PHPer 來(lái)說(shuō),可能都不知道 Generator,或者對(duì) Generaotr 的流程不是很熟悉。因?yàn)?Generator 使得程序不再是順...
摘要:一的幾個(gè)函數(shù)異常捕獲自定義處理函數(shù)注冊(cè)錯(cuò)誤捕獲自定義處理函數(shù)注冊(cè)程序執(zhí)行時(shí)異常終止錯(cuò)誤捕獲處理函數(shù)注冊(cè)這三個(gè)函數(shù)在錯(cuò)誤處理控制中給開(kāi)發(fā)者提供了很大的自主空間,在日志系統(tǒng)中記錄日志信息有他們的功勞。下面要說(shuō)的類庫(kù)是借鑒了日志系統(tǒng)的設(shè)計(jì)。 引言 接觸過(guò)php框架的朋友們可能都知道,日志在項(xiàng)目中的重要作用了,他可以幫助我們定位錯(cuò)誤的位置,讓程序更友好(處理得當(dāng)?shù)脑挷粫?huì)直接拋出一大堆只有程...
閱讀 1785·2023-04-26 00:47
閱讀 1543·2021-11-11 16:55
閱讀 2597·2021-09-27 14:04
閱讀 3548·2021-09-22 15:58
閱讀 3554·2021-07-26 23:38
閱讀 2129·2019-08-30 13:47
閱讀 1979·2019-08-30 13:15
閱讀 1142·2019-08-29 17:09