php異常處理的那些事

先上代碼:


set_error_handler(function ($errno, $errstr, $errfile, $errline) {

    var_dump('我是下面程序還沒有運(yùn)行前系統(tǒng)充當(dāng)默認(rèn)的異常處理函數(shù)位他,下面程序在捕捉到了自己的異常后需要恢復(fù)(restore_error_handler)我這個(gè)異常捕捉函數(shù)');

});

/**
* @param callable $errno 必須。錯(cuò)誤級(jí)別绎晃,是一個(gè)integer
* @param string $errstr 必須胶滋。錯(cuò)誤信息,是一個(gè)string
* @param string $errfile 可選。錯(cuò)誤的文件名蹄溉,是一個(gè)string
* @param string $errline 可選。錯(cuò)誤的行號(hào)您炉, 是一個(gè)integer
* @throws Exception 異常對(duì)象
* @return void | boolean 返回值為false柒爵,系統(tǒng)就會(huì)追加異常
*/

function errorHandle($errno, $errstr, $errfile, $errline){
    throw new Exception("故意在這里再次拋出異常,然后你用try赚爵,catch就可以接收了".$errstr.$errfile);
}

/**

* @return void

*/

function errorReport(){

    set_error_handler('errorHandle');

    $a = 0;

    $b = 11 / $a;

}

try{

    //報(bào)錯(cuò)函數(shù),有時(shí)候程序報(bào)出得錯(cuò)誤 Exception 是捕捉不到的棉胀,try,catch只能捕捉我們程序自己主動(dòng)拋出的錯(cuò)誤冀膝,比如 throw new Exception("我是主動(dòng)拋出的")

//這個(gè)時(shí)候如果我們還想捕捉錯(cuò)誤唁奢,就是本文想要表達(dá)的

//set_error_handler能夠幫助我們捕獲大部分,但其實(shí) set_error_handler 能夠捕捉的錯(cuò)誤也是有限的窝剖,

//如果你想知道實(shí)實(shí)在在的哪些被捕捉了麻掸,哪些可能捕捉不到,這個(gè)時(shí)候你就需要取了解php錯(cuò)誤的類型列表了 @移步 https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html?from=timeline

// 里面請(qǐng)重點(diǎn)關(guān)照  error_reporting(), register_shutdown_function(),set_error_handler(),set_exception_handler()
    $a = 1;
    if($a == 2){
        restore_error_handler(); //該函數(shù)在退出之前我們得恢復(fù)到之前的異常處理機(jī)制赐纱,所以每一處退出行為之前论笔,都得執(zhí)行它
        return false;
     }
    $g = errorReport();
}catch (Exception $e){
    restore_error_handler();//這個(gè)是 函數(shù)恢復(fù)之前的錯(cuò)誤處理程序采郎。有時(shí)候我們?cè)诔绦蛑兄皇菫榱吮WC當(dāng)前函數(shù)錯(cuò)誤可控,又不能影響到全局異常狂魔,那么這個(gè)函數(shù)登場(chǎng)了
    var_dump($e->getMessage());

}

總結(jié):

1.在php中我們平常用的try,catch只能捕獲我們主動(dòng)拋出的異常蒜埋,當(dāng)然除非你的框架已經(jīng)幫你把異常捕獲處理得能夠通過try,catch去捕獲所有錯(cuò)誤了,那也只能說明你是在框架布好的"局"中在寫代碼.那如果有一天你自己需要寫composer包了呢最楷,是不是得了解點(diǎn)整份,讓包健壯點(diǎn),不然誰該用你的包撒

2.set_error_handler(),能夠幫我們主動(dòng)去捕獲一些異常(這里說的主動(dòng)是你代碼在你不知情的情況下報(bào)錯(cuò)了籽孙,而非throw new Exception 你知道錯(cuò)了手動(dòng)主動(dòng)拋出)烈评,它和restore_error_handler()可打配合。

3.error_reporting(0)犯建,可以讓我們的代碼在執(zhí)行過程中遇錯(cuò)了也不往上拋了讲冠,從而達(dá)到完全全面的接管錯(cuò)誤處理

4.register_shutdown_function(),你語法上的錯(cuò)誤它也能捕獲

5.說來說去适瓦,就是不同的錯(cuò)誤php會(huì)有不同的對(duì)待方式竿开,如果你要結(jié)管,自己管(好處就是你可以自定義對(duì)外輸出格式,從而實(shí)時(shí)讓你的程序可控玻熙,及健壯)否彩,就去要去了解php對(duì)待該種錯(cuò)誤的方式,意思就是有哪個(gè)函數(shù)可以接管該異常情況嗦随。
點(diǎn)擊查看借閱文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末列荔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子枚尼,更是在濱河造成了極大的恐慌贴浙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件署恍,死亡現(xiàn)場(chǎng)離奇詭異崎溃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锭汛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袭蝗,“玉大人唤殴,你說我怎么就攤上這事〉叫龋” “怎么了朵逝?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乡范。 經(jīng)常有香客問我配名,道長啤咽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任渠脉,我火速辦了婚禮宇整,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芋膘。我一直安慰自己鳞青,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布为朋。 她就那樣靜靜地躺著臂拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习寸。 梳的紋絲不亂的頭發(fā)上胶惰,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音霞溪,去河邊找鬼孵滞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛威鹿,可吹牛的內(nèi)容都是我干的剃斧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼忽你,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼幼东!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起科雳,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤根蟹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糟秘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體简逮,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年尿赚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了散庶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凌净,死狀恐怖悲龟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冰寻,我是刑警寧澤须教,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站斩芭,受9級(jí)特大地震影響轻腺,放射性物質(zhì)發(fā)生泄漏乐疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一贬养、第九天 我趴在偏房一處隱蔽的房頂上張望挤土。 院中可真熱鬧,春花似錦煤蚌、人聲如沸耕挨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒占。三九已至,卻和暖如春蜘犁,著一層夾襖步出監(jiān)牢的瞬間翰苫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工这橙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奏窑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓屈扎,卻偏偏與公主長得像埃唯,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹰晨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 開篇一題:問:此腳本執(zhí)行輸出什么墨叛,如果出現(xiàn)錯(cuò)誤如何捕獲處理錯(cuò)誤? 請(qǐng)先思考一下模蜡,然后帶著問題來看一下PHP的錯(cuò)誤與...
    幽思片羽閱讀 559評(píng)論 0 0
  • 異常與錯(cuò)誤的區(qū)別 關(guān)于異常處理這一塊漠趁,在官方的手冊(cè)上介紹的不夠詳細(xì),所以我在這里再做一個(gè)相對(duì)詳細(xì)一點(diǎn)的總結(jié)...
    四月不見閱讀 2,224評(píng)論 0 10
  • 本文的主題是怎么組織php的異常忍疾?在大型項(xiàng)目中異常往往被我們忽略闯传,但是如果前期沒有很好的規(guī)劃好,越到項(xiàng)目后期卤妒,重構(gòu)...
    guanguans閱讀 336評(píng)論 0 2
  • 本文的主題是怎么組織php的異常甥绿?在大型項(xiàng)目中異常往往被我們忽略,但是如果前期沒有很好的規(guī)劃好则披,越到項(xiàng)目后期共缕,重構(gòu)...
    小聰明李良才閱讀 1,964評(píng)論 14 12
  • 去年我去無錫面試迪卡儂時(shí)骄呼,當(dāng)時(shí)有個(gè)體院畢業(yè)一段時(shí)間的哥們對(duì)我說:工作要經(jīng)歷幾個(gè)階段共苛,剛開始入職的三個(gè)月判没,你對(duì)...
    當(dāng)年秦時(shí)閱讀 222評(píng)論 0 3