欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂PHP培訓(xùn)淺談php錯(cuò)誤處理異常處理控制函數(shù)詳解

2018-01-19 11:14:50 1398瀏覽

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



try{

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

}

catch(Exception$e)

{

var_dump($e);

}

所以引用以下幾中函數(shù)。

error_reporting(E_ALL);設(shè)置異常錯(cuò)誤顯示等級(jí)0為禁止錯(cuò)誤

//禁用錯(cuò)誤報(bào)告

error_reporting(0);

//報(bào)告運(yùn)行時(shí)錯(cuò)誤

error_reporting(E_ERROR|E_WARNING|E_PARSE);

//報(bào)告所有錯(cuò)誤

error_reporting(E_ALL);

//除去提醒處理

error_reporting(E_ALL~E_NOTICE);

set_exception_handler當(dāng)出現(xiàn)異常trycatch未捕捉到的時(shí)候就會(huì)觸發(fā)一個(gè)參數(shù)是一個(gè)執(zhí)行的自定義錯(cuò)誤處理函數(shù)、可以是數(shù)組第一個(gè)值是那個(gè)類,第二個(gè)值是類里面的什么方法

register_shutdown_function當(dāng)php腳本執(zhí)行即將關(guān)閉時(shí)執(zhí)行的函數(shù)、腳本執(zhí)行完或者出錯(cuò)如果再次之前設(shè)置過這個(gè)函數(shù)就會(huì)觸發(fā)參數(shù)一個(gè)函數(shù)名用來處理、可以是系統(tǒng)內(nèi)置也可以是自定義的

trigger_error用戶自定一個(gè)一個(gè)異常錯(cuò)誤第一個(gè)參數(shù)錯(cuò)誤內(nèi)容第二個(gè)可選參數(shù)錯(cuò)誤級(jí)別

error_get_last()獲取最后發(fā)生的異常錯(cuò)誤

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

一般用于捕捉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),配合使用。

預(yù)覽源代碼打印

//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

設(shè)置默認(rèn)的異常處理程序,用于沒有用try/catch塊來捕獲的異常。在exception_handler調(diào)用后異常會(huì)中止。

與thrownewException('UncaughtExceptionoccurred'),連用。

預(yù)覽源代碼打印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

執(zhí)行機(jī)制是:php把要調(diào)用的函數(shù)調(diào)入內(nèi)存。當(dāng)頁面所有PHP語句都執(zhí)行完成時(shí),再調(diào)用此函數(shù)。

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

預(yù)覽源代碼打印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']對(duì)應(yīng)php_error常量

13$message='';

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

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

16$message.="出錯(cuò)行數(shù):\t".$e['line']."\n\n";

17$message.="\t\t請(qǐng)工程師檢查出現(xiàn)程序".$e['file']."出現(xiàn)錯(cuò)誤的原因\n";

18$message.="\t\t希望能您早點(diǎn)解決故障出現(xiàn)的原因";

19echo$message;

20//sendemailto

21}

22}

23?>

c)restore_error_handler()函數(shù)

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

該函數(shù)永遠(yuǎn)返回true。

是set_error_handler()的反函數(shù)。

每次調(diào)用該函數(shù)下次出現(xiàn)異常就會(huì)執(zhí)行前一個(gè)定義錯(cuò)誤的函數(shù),如果一直恢復(fù)之前,直到恢復(fù)到之前沒有處理函數(shù)就會(huì)報(bào)錯(cuò);

預(yù)覽源代碼打印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

以上就是關(guān)于php錯(cuò)誤處理異常處理控制函數(shù)的詳細(xì)介紹,最后想要了解更多關(guān)于PHP發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的PHP視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的第一套自適應(yīng)PHP在線視頻課程系統(tǒng),讓你快速掌握PHP從入門到精通開發(fā)實(shí)戰(zhàn)技能。



扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料



查看更多關(guān)于“php培訓(xùn)資訊的相關(guān)文章>>

標(biāo)簽:

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部