国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

php gerr 統(tǒng)一的錯(cuò)誤處理 v0

2024-05-04 21:49:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一般統(tǒng)一的錯(cuò)誤處理機(jī)制是使用[異常],PHP也提供了異常的功能,但異常對(duì)概念及知識(shí)面都有要求,才能用好,為避免復(fù)雜,所以不使用異常作為統(tǒng)一的錯(cuò)誤處理.

網(wǎng)站程序的錯(cuò)誤處理,最常用的就是中斷程序執(zhí)行,顯示給用戶(hù)一個(gè)提示框,比如在控制器中使用 showmessage() 進(jìn)行錯(cuò)誤提示,所以,在控制器中直接使用 showmessage() 中提示即可.

不過(guò),showmessage() 并不適合在類(lèi)方法及函數(shù)中使用,因?yàn)橛袝r(shí)調(diào)用者需要自己對(duì)錯(cuò)誤進(jìn)行處理,比如,錯(cuò)誤提示使用 JS 的 alert() 彈出,而不是顯示一個(gè) html 頁(yè)面,因此,要統(tǒng)一的是類(lèi)方法中及函數(shù)中的錯(cuò)誤處理.

保守的寫(xiě)法是函數(shù)返回 true 或 false,并通過(guò)比如傳地址的參數(shù)傳遞錯(cuò)誤信息:

bool func_name(& $error)

類(lèi)方法則在類(lèi)中定義一個(gè) get_error() 之類(lèi)的方法返回最后一次錯(cuò)誤信息.

但是,當(dāng)出現(xiàn)多層調(diào)用時(shí),比如 調(diào)用者 -> A() -> B() -> C() ,在 C 函數(shù)中出現(xiàn)錯(cuò)誤,這種方式要傳遞錯(cuò)誤信息就很麻煩了:B() 要處理并兼容 C() 的錯(cuò)誤處理,A() 要兼容 B() 的錯(cuò)誤處理.

只有異常才很“自然”地支持錯(cuò)誤信息的向上傳遞,手動(dòng)模擬的向上傳遞代碼寫(xiě)起來(lái)都很麻煩,不愿意寫(xiě).

網(wǎng)站程序的錯(cuò)誤處理,就是想在發(fā)生錯(cuò)誤時(shí)默認(rèn)就給用戶(hù)一個(gè)提示并中斷程序執(zhí)行,并且當(dāng)調(diào)用者需要自定義如何處理錯(cuò)誤時(shí)允許調(diào)用者自定義.

所以,統(tǒng)一的錯(cuò)誤處理就是默認(rèn)直接對(duì)用戶(hù)進(jìn)行中斷提示,比如數(shù)據(jù)庫(kù)插入錯(cuò)誤,又允許調(diào)用者需要的時(shí)候可以自定義處理錯(cuò)誤,比如使用 JS 彈出錯(cuò)誤信息.

于是,引入 gerr 類(lèi)統(tǒng)一網(wǎng)站程序的錯(cuò)誤處理:

gerr 類(lèi)位于 /include/gerr.class.php,類(lèi)名為 gerr,所有方法都為靜態(tài)方法,無(wú)需也無(wú)法實(shí)例化.Vevb.com

當(dāng)方法或函數(shù)中出現(xiàn)錯(cuò)誤時(shí),調(diào)用 gerr::error() 設(shè)置錯(cuò)誤信息并返回 false.

默認(rèn) gerr::error() 會(huì)調(diào)用 showmessge() 進(jìn)行錯(cuò)誤提示。

當(dāng)調(diào)用者需要自定義處理錯(cuò)誤時(shí),可以調(diào)用 gerr::func_set() 設(shè)置一個(gè)自定義的錯(cuò)誤處理函數(shù),gerr::error() 便會(huì)調(diào)用調(diào)用者設(shè)置的錯(cuò)誤處理函數(shù)進(jìn)行錯(cuò)誤處理.

一般來(lái)說(shuō)錯(cuò)誤處理方式都是由控制器決定的,所以 gerr::func_set() 一般是在控制器中調(diào)用。可以使用 gerr::func_reset() 把錯(cuò)誤處理函數(shù)重置為默認(rèn)函數(shù)。

在方法和函數(shù)中,可以使用 gerr::check() 檢查是否已發(fā)生錯(cuò)誤(一般發(fā)生錯(cuò)誤都需要中斷程序執(zhí)行,不中斷繼續(xù)執(zhí)行只會(huì)發(fā)生更多的錯(cuò)誤),防止已發(fā)生的錯(cuò)誤未被處理.

若類(lèi)方法或函數(shù)使用“流程”的形式組織(比如要先 fopen 后才能 fwrite),在流程開(kāi)始時(shí)調(diào)用 gerr::start() 讓 gerr 進(jìn)行流程的初始化,在流程成功完成后調(diào)用 gerr::end() 通知 gerr 流程已結(jié)束。

可以使用 gerr::get() 取得錯(cuò)誤信息。

一個(gè)使用 gerr 的函數(shù)示例:

  1. function myerr()   
  2. {   
  3. if (false)   
  4. {   
  5. gerr::error('發(fā)生錯(cuò)誤了'__FILE____LINE____FUNCTION__);   
  6. return false;  //開(kāi)源軟件:Vevb.com 
  7. }   
  8. return true   
  9. }

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 屯昌县| 泗水县| 南投市| 手游| 金山区| 玛沁县| 龙南县| 大埔区| 鸡泽县| 肇东市| 金湖县| 新乡县| 张家界市| 南昌县| 高青县| 本溪市| 镇原县| 厦门市| 凤凰县| 昌宁县| 田林县| 江山市| 海城市| 九寨沟县| 荥阳市| 蓬安县| 凤山市| 乡城县| 吐鲁番市| 抚顺市| 察隅县| 措勤县| 铜梁县| 铜陵市| 十堰市| 娄烦县| 陈巴尔虎旗| 穆棱市| 龙口市| 江阴市| 丽水市|