扣丁学堂PHP培训浅谈php错误处理异常处理控制函数详解

2018-01-19 11:14:50 571浏览

在现如今,随着互联网技术发展越来越成熟,比如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培训资讯的相关文章>>

标签:

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号