"); //-->
在现如今,随着互联网技术发展越来越成熟,比如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。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
X40420_X40421 带看门狗4K 位EEPROM 的双电压监控芯片
[原创]嗨~~!域名~~大降价,70元/年~!
[求助]本人急需中英文对照通信资料!愿付报酬!!
M50163—150SP (电视机)红外线遥控接收微处理器
雷达式节能灯座电路原理图
Melexis无代码LIN LED驱动器
特斯拉的“疯狂麦克斯”模式现在正在接受联邦审查
住友3M展示投影式静电容量式触摸面板
中国团队研发的芯片提供与数字一样精确的模拟计算
WINNT-2000下直接写端口 的VC++源程序
移动通信IC设计应用研讨会演讲稿下载
后PC时代(智能地球时代)研华之全球战略
外媒爆大众受安世供应影响将停产4车型
正弦振幅转换器拓扑实现一流的轉換效率和功率密度
继入股英特尔后,美国将考虑投资IonQ、Rigetti 和 D-Wave
flash的烧写问题
宽 VIN 范围降压型稳压器仅消耗 2.8µA 输入电流
VFD驱动控制电路SM16312-1
KA2305A (玩具)无线电遥控接收控制调节电路
CAST通过新的Catalyst 计划简化RISC-V嵌入式处理器 IP 的采用
数字编码遥控开关(数字编译码器MC145026/MC145027微型无线电收发模块M303S/M30
[求助]有谁知道MT58L256L32是什么存储器吗?
X40430_X40431带看门狗4K 位EEPROM 的三路电压监控芯片
封装中玻璃的采用率不断提高
嵌入式核心事业群使命及愿景
加速汽车生产:人工智能和数字孪生推动 2025 年效率
谷歌声称Willow芯片具有量子优势
KA2311 (玩具)无线电遥控接收控制调节电路
常用场效应管IRF参数表
因良率问题,三星Exynos 2600可能仅覆盖Galaxy S26产量的30%