PHP错误与异常的处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
错误与异常
错误,可以理解<强>程序本身的错误>强,例如语法错误。而异常则更偏向于<强>程序运行不符合预期>强或者<强>不符合正常流程>强;对于PHP语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。
例如,我们希望通过捕获异常来处理除数为0的情况,但是在捕获到异常之前,PHP就触发了错误。
try { ,,,a 美元;=,5,/,0; },catch (Exception $ e), { ,,,$ e→getMessage (); ,,,a 美元;=,1;,,//,通过异常来处理,a 美元;为,0,的情况,但是实际上,捕获不到该异常 } echo 美元; 警告://,PHP , Division by 0
也就是说,PHP将除数为0的情况当成了错误而触发,而不会自动抛出异常,因此没法捕获。类似的,在很多情况下,PHP都没办法自动抛出异常。只能通过,<代码>如果其他-> 代码,语句判断再结合,<代码> 代码>扔,方法来并手动抛出异常。
上述情况的发生,主要还是因为异常机制是PHP向面向对象演进后得到的产物。而在此之前PHP的报错主要还是通过错误机制,因此,在很多情况下,PHP的错误要比异常更有价值。不过PHP7开始统一这两者,使错误也可以像异常那样抛出(这部分内容将放在异常部分讲解)。
错误级别
PHP中的错误可理解为,<强>使脚本不运行不正常的情况>强,根据错误级别从高到低可划分为五类
- <李>
解析错误或语法错误——语法解析错,误触发该错误后,脚本<强>完全强>无法运行;
李> <李>致命错误——致命错,误触发该错误后,<强>后面的脚本强>无法继续执行;
李> <李>警告错误——出现比较不恰当的地方,脚本可<强>继续执行强>,
李> <李>通知错误,出现不恰当的地方,但是程度比警告错误低,脚本可<强>继续执行强>,
李> <李>弃用错误——不推荐这么使用,未来可能会废弃,脚本可<强>继续执行强>,
李>默认情况下,PHP触发错误,并显示错误的级别及对应的提示。
解析错误示例——语句结尾不写分号
echo “abc"//,PHP Parse 错误:,,syntax 错误,,unexpected 最终获得of 文件,,expecting & # 39; & # 39;,趁机& # 39;;
致命错误示例——使用不存在的函数
echo “之前\ n"; foo (); echo “after",,//,本行无法继续执行//之前//,PHP Fatal 错误:,,Uncaught 错误:,Call 用undefined function foo ()
警告错误示例——引入不存在的文件
a 美元;=,“foo"; 包括(& # 39;写到# 39;); echo 一个美元,//,程序继续执行 警告://,PHP ,包括(写到):,failed 用open 流:,No such file 或是directory …//,foo
通知错误示例——输出不存在的变量
echo $ foo; echo 12345; 注意://,PHP , Undefined 变量:foo//,12345
弃用错误示例——在一些字符串函数中传入数字而非字符串
大小写敏感(& # 39;12345 & # 39;,,3);//,PHP 弃用:,,():大小写敏感,Non-string needles will be interpreted as strings 拷贝,未来
除了默认触发消息外,用户也可以使用,<代码> set_error_handler> 代码,函数自定义错误处理,大多数错误类型都可以进行自定义处理,除了,<代码> E_ERROR 代码>,<代码> E_PARSE 代码>,<代码> E_CORE_ERROR 代码>,<代码> E_CORE_WARNING 代码>,<代码> E_COMPILE_ERROR 代码>,<代码> E_COMPILE_WARNING> 代码,外。
set_error_handler (, callable error_handler 美元;[,int error_types 美元;=,E_ALL |, E_STRICT ],),:,混合
示例
& lt; php ?//,E_ALL 安康;处理全部错误类型 set_error_handler (& # 39; customError& # 39;,, E_ALL);/* * ,* @param , int errno 美元;错误的级别 ,* @param , string errstr 美元;,错误的信息 ,* @param , string errfile 美元;错误的文件名(可选) ,* @param , string errline 美元;错误发生的行号(可选) ,*/function customError (int errno,美元,string errstr美元,string errfile美元,string errline美元) { ,,,echo sprintf(& # 39;错误消息为,% & # 39;,,errstr美元); } a 美元;=,5,/,0;,,//,错误消息为,Division by 0PHP错误与异常的处理