博客專欄

        EEPW首頁 > 博客 > php錯誤處理異常處理控制函數詳解

        php錯誤處理異常處理控制函數詳解

        發布人:only1 時間:2020-09-24 來源:工程師 發布文章

        在現如今,隨著互聯網技術發展越來越成熟,比如PHP7.0對速度進行大幅度提高之后,7.1版本繼續優化了在網頁服務器方面的性能,而今天扣丁學堂PHP培訓關于php錯誤處理異常處理控制函數做了一些介紹,首先在實際開發中,錯誤及異常捕捉僅僅靠try{}catch()是遠遠不夠的,下面我們一起來看一下吧。  

        try{  

        //在這里主動拋出異常,(在這里說一下,php正常開發中最好不要主動拋出異常)thrownewException('NichtaufgefangeneException');  

        }  

        catch(Exception$e)  

        {  

        var_dump($e);  

        }  

        所以引用以下幾中函數。  

        error_reporting(E_ALL);設置異常錯誤顯示等級0為禁止錯誤  

        //禁用錯誤報告  

        error_reporting(0);  

        //報告運行時錯誤  

        error_reporting(E_ERROR|E_WARNING|E_PARSE);  

        //報告所有錯誤  

        error_reporting(E_ALL);  

        //除去提醒處理  

        error_reporting(E_ALL~E_NOTICE);  

        set_exception_handler當出現異常trycatch未捕捉到的時候就會觸發一個參數是一個執行的自定義錯誤處理函數、可以是數組第一個值是那個類,第二個值是類里面的什么方法  

        register_shutdown_function當php腳本執行即將關閉時執行的函數、腳本執行完或者出錯如果再次之前設置過這個函數就會觸發參數一個函數名用來處理、可以是系統內置也可以是自定義的  

        trigger_error用戶自定一個一個異常錯誤第一個參數錯誤內容第二個可選參數錯誤級別  

        error_get_last()獲取最后發生的異常錯誤  

        a)set_error_handler設置異常處理函數一個參數是一個執行的自定義錯誤處理函數、可以是數組第一個值是那個類,第二個值是類里面的什么方法  

        一般用于捕捉E_NOTICE、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE  

        不能捕捉:  

        E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERRORandE_COMPILE_WARNING。  

        一般與trigger_error("...",E_USER_ERROR),配合使用。  

        預覽源代碼打印  

        //wewilldoourownerrorhandling  

        03error_reporting(0);  

        04functionuserErrorHandler($errno,$errmsg,$filename,$linenum,$vars)  

        05{  

        06//timestampfortheerrorentry  

        07$dt=date("Y-m-dH:i:s(T)");  

        08//defineanassocarrayoferrorstring  

        09//inrealitytheonlyentriesweshould  

        10//considerareE_WARNING,E_NOTICE,E_USER_ERROR,  

        11//E_USER_WARNINGandE_USER_NOTICE  

        12$errortype=array(  

        13E_ERROR=>'Error',  

        14E_WARNING=>'Warning',  

        15E_PARSE=>'ParsingError',  

        16E_NOTICE=>'Notice',  

        17E_CORE_ERROR=>'CoreError',  

        18E_CORE_WARNING=>'CoreWarning',  

        19E_COMPILE_ERROR=>'CompileError',  

        20E_COMPILE_WARNING=>'CompileWarning',  

        21E_USER_ERROR=>'UserError',  

        22E_USER_WARNING=>'UserWarning',  

        23E_USER_NOTICE=>'UserNotice',  

        24E_STRICT=>'RuntimeNotice',  

        25E_RECOVERABLE_ERROR=>'CatchableFatalError'  

        26);  

        27//setoferrorsforwhichavartracewillbesaved  

        28$user_errors=array(E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE);  

        29$err="\n";  

        30$err.="\t".$dt."\n";  

        31$err.="\t".$errno."\n";  

        32$err.="\t".$errortype[$errno]."\n";  

        33$err.="\t".$errmsg."\n";  

        34$err.="\t".$filename."\n";  

        35$err.="\t".$linenum."\n";  

        36if(in_array($errno,$user_errors)){  

        37$err.="\t".wddx_serialize_value($vars,"Variables")."\n";  

        38}  

        39$err.="\n\n";  

        40echo$err;  

        41}  

        42functiondistance($vect1,$vect2){  

        43if(!is_array($vect1)||!is_array($vect2)){  

        44trigger_error("Incorrectparameters,arraysexpected",E_USER_ERROR);  

        45returnNULL;  

        46}  

        47if(count($vect1)!=count($vect2)){  

        48trigger_error("Vectorsneedtobeofthesamesize",E_USER_ERROR);  

        49returnNULL;  

        50}  

        51for($i=0;$i  

        52$c1=$vect1[$i];$c2=$vect2[$i];  

        53$d=0.0;  

        54if(!is_numeric($c1)){  

        55trigger_error("Coordinate$iinvector1isnotanumber,usingzero",E_USER_WARNING);  

        56$c1=0.0;  

        57}  

        58if(!is_numeric($c2)){  

        59trigger_error("Coordinate$iinvector2isnotanumber,usingzero",E_USER_WARNING);  

        60$c2=0.0;  

        61}  

        62$d+=$c2*$c2-$c1*$c1;  

        63}  

        64returnsqrt($d);  

        65}  

        66  

        67$old_error_handle=set_error_handler("userErrorHandler");  

        68$t=I_AM_NOT_DEFINED;//generatesawarning  

        69  

        70//definesome"vectors"  

        71$a=array(2,3,"foo");  

        72$b=array(5.5,4.3,-1.6);  

        73$c=array(1,-3);  

        74  

        75//generateausererror  

        76$t1=distance($c,$b);  

        77  

        78//generateanotherusererror  

        79$t2=distance($b,"iamnotanarray")."\n";  

        80  

        81//generateawarning  

        82$t3=distance($a,$b)."\n";  

        83?>  

        b)set_exception_handler  

        設置默認的異常處理程序,用于沒有用try/catch塊來捕獲的異常。在exception_handler調用后異常會中止。  

        與thrownewException('UncaughtExceptionoccurred'),連用。  

        預覽源代碼打印01  

        02//wewilldoourownerrorhandling  

        03error_reporting(0);  

        04functionexceptHandle($errno,$errmsg,$filename,$linenum,$vars)  

        05{  

        06//timestampfortheerrorentry  

        07$dt=date("Y-m-dH:i:s(T)");  

        08//defineanassocarrayoferrorstring  

        09//inrealitytheonlyentriesweshould  

        10//considerareE_WARNING,E_NOTICE,E_USER_ERROR,  

        11//E_USER_WARNINGandE_USER_NOTICE  

        12$errortype=array(  

        13E_ERROR=>'Error',  

        14E_WARNING=>'Warning',  

        15E_PARSE=>'ParsingError',  

        16E_NOTICE=>'Notice',  

        17E_CORE_ERROR=>'CoreError',  

        18E_CORE_WARNING=>'CoreWarning',  

        19E_COMPILE_ERROR=>'CompileError',  

        20E_COMPILE_WARNING=>'CompileWarning',  

        21E_USER_ERROR=>'UserError',  

        22E_USER_WARNING=>'UserWarning',  

        23E_USER_NOTICE=>'UserNotice',  

        24E_STRICT=>'RuntimeNotice',  

        25E_RECOVERABLE_ERROR=>'CatchableFatalError'  

        26);  

        27//setoferrorsforwhichavartracewillbesaved  

        28$err="\n";  

        29$err.="\t".$dt."\n";  

        30$err.="\t".$errno."\n";  

        31$err.="\t".$errortype[$errno]."\n";  

        32$err.="\t".$errmsg."\n";  

        33$err.="\t".$filename."\n";  

        34$err.="\t".$linenum."\n";  

        35if(1){  

        36$err.="\t".wddx_serialize_value($vars,"Variables")."\n";  

        37}  

        38$err.="\n\n";  

        39echo$err;  

        40}  

        41$old_except_handle=set_exception_handler("exceptHandle");  

        42//$t=I_AM_NOT_DEFINED;//generatesawarning  

        43$a;  

        44thrownewException('UncaughtExceptionoccurred');  

        45?>  

        c)register_shutdown_function  

        執行機制是:php把要調用的函數調入內存。當頁面所有PHP語句都執行完成時,再調用此函數。  

        一般與trigger_error("...",E_USER_ERROR),配合使用。  

        預覽源代碼打印01  

        02error_reporting(0);  

        03date_default_timezone_set('Asia/Shanghai');  

        04register_shutdown_function('my_exception_handler');  

        05  

        06$t=I_AM_NOT_DEFINED;//generatesawarning  

        07trigger_error("Vectorsneedtobeofthesamesize",E_USER_ERROR);  

        08  

        09functionmy_exception_handler()  

        10{  

        11if($e=error_get_last()){  

        12//$e['type']對應php_error常量  

        13$message='';  

        14$message.="出錯信息:\t".$e['message']."\n\n";  

        15$message.="出錯文件:\t".$e['file']."\n\n";  

        16$message.="出錯行數:\t".$e['line']."\n\n";  

        17$message.="\t\t請工程師檢查出現程序".$e['file']."出現錯誤的原因\n";  

        18$message.="\t\t希望能您早點解決故障出現的原因";  

        19echo$message;  

        20//sendemailto  

        21}  

        22}  

        23?>  

        c)restore_error_handler()函數  

        定義和用法restore_error_handler()函數恢復之前的錯誤處理程序,該程序是由set_error_handler()函數改變的。  

        該函數永遠返回true。  

        是set_error_handler()的反函數。  

        每次調用該函數下次出現異常就會執行前一個定義錯誤的函數,如果一直恢復之前,直到恢復到之前沒有處理函數就會報錯;  

        預覽源代碼打印01mysql_connect("inexistent");//Generateanerror.Theactualerrorhandlerissetbydefault  

        02  

        03functionfoo1(){echo"Errorfoo1";}  

        04functionfoo2(){echo"Errorfoo2";}  

        05functionfoo3(){echo"Errorfoo3";}  

        06  

        07set_error_handler("foo1");//currenterrorhandler:foo1  

        08set_error_handler("foo2");//currenterrorhandler:foo2  

        09set_error_handler("foo3");//currenterrorhandler:foo3  

        10  

        11mysql_connect("inexistent");  

        12restore_error_handler();//now,currenterrorhandler:foo2  

        13mysql_connect("inexistent");  

        14restore_error_handler();//now,currenterrorhandler:foo1  

        15mysql_connect("inexistent");  

        16restore_error_handler();//nowcurrenterrorhandler:defaulthandler  

        17mysql_connect("inexistent");  

        18restore_error_handler();//nowcurrenterrorhandler:defaulthandler(Thestackcan't  

        以上就是關于php錯誤處理異常處理控制函數的詳細介紹,最后想要了解更多關于PHP發展前景趨勢,請關注扣丁學堂官網、微信等平臺,扣丁學堂IT職業在線學習教育平臺為您提供權威的PHP視頻教程系統,通過千鋒扣丁學堂金牌講師在線錄制的第一套自適應PHP在線視頻課程系統,讓你快速掌握PHP從入門到精通開發實戰技能。扣丁學堂PHP技術交流群:374332265。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        比較器相關文章:比較器工作原理


        上拉電阻相關文章:上拉電阻原理


        關鍵詞:

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绩溪县| 芜湖市| 淮安市| 九台市| 虞城县| 宁武县| 麦盖提县| 通江县| 巩义市| 博罗县| 梁河县| 峡江县| 科技| 铜山县| 衡东县| 镇坪县| 青神县| 定安县| 澄城县| 城步| 湟源县| 隆安县| 邹城市| 启东市| 略阳县| 汝阳县| 库伦旗| 海口市| 蚌埠市| 堆龙德庆县| 福海县| 县级市| 忻州市| 蕲春县| 阳原县| 淳安县| 广安市| 林芝县| 高尔夫| 尉犁县| 和顺县|