php中的错误以及异常处理的总结

1、错误处理

a、关于php中错误处理的一些常量

常量解释
1E_ERROR解析时致命错误 fatal
4E_PARSE解析时语法错误 parse
2E_WARNING警告 warning
8E_NOTICE提示 notice
256E_USER_ERROR用户级别的错误
512E_USER_WARNING用户级别的错误
1024E_USER_NOTICE用户级别的错误
16E_CORE_ERRORphp内核错误  由PHP引擎产生
32E_CORE_WARNINGphp内核警告  由PHP引擎产生
64E_COMPIILE_ERRORphp编译错误 Zend引擎产生
128E_COMPIILE_WARNINGphp编译警告 Zend引擎产生
2048E_STRICT显示PHP对代码的修改建议
8196E_ALL显示所有错误
4096E_RECOVERABLE_ERROR可以被用户函数捕获的致命(E_ERROR)错误

解释错误级别的产生

E_ERROR fatal

运行时错误

e.g. 定义的函数不存在、重复定义函数

E_PARSE parse

解释时错误,导致php解析器无法读懂源码

e.g. 少写分号 、括号不匹配 

E_WARNING warning

警告

代码可被解释但是可执行 执行是被忽略(代码不起作用)

e.g. $a='';

foreach($a as $b){}

foreach无法处理非array object 的变量

E_NOTICE notice

提示

常见于变量未定义、但是可以解释通过 可以执行

他们的优先级别 E_ERROR > E_PARSE > E_WARNING > E_NOTICE

b、用户自定义处理错误的机制(这个机制跟php的错误机制是独立的)

使用机制:

// 指定错误处理函数
set_error_handler('error_handler');
// 触发用户级别错误的函数
trigger_error($errmsg,$errno); // user_error() alias of trigger_error
//错误处理函数
function error_handler($no,$msg,$file,$line,$context)
{
/*	$no 		错误号
	$msg 		错误信息
	$file 		文件
	$line 		行号
	$context 	错误时全局数组*/
	exit();
}

set_error_handler   设置捕获错误的函数

trigger_error($msg , $type)  触发错误


2、异常处理

异常的处理机制: 异常抛出 - 捕获处理  每一个抛出的异常都要被捕获

抛出异常的方法

throw new Exception("Exception Message", $code);

捕获异常的方法有两种

a、异常是在try中抛出的,那就必须在catch中捕获

e.g.

try{
	// 抛出异常
	throw new Exception("you should give string", 11);
}
catch(Exception $e){
	print_r($e);
}

b、异常不在try中抛出,要用set_exception_handler指定捕获异常的函数

// 指定异常捕获函数
set_exception_handler('exception_handler');
// 抛出异常
throw new Exception("exception message no try", 1);
// 定义异常捕获函数
function exception_handler($e)
{
	echo $e->getMessage();
}

注意:

错误导致脚本终止向下执行 

异常并不会导致程序终止,程序会继续向下执行


3、其他

ErrorException 、 RuntimeException 都继承自 Exception

RuntimeException是运行时异常

ErrorException 重写了Exception的 构造函数,可以给class传递 错误信息(错误号,错误信息,错误文件,错误行,。。)


public ErrorException::__construct ([ string $message = "" [, int $code = 0 [, int $severity = 1[, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )

参数 ¶

message

抛出的异常消息内容。

code

异常代码。

severity

异常的严重级别。

filename

抛出异常所在的文件名。

lineno

抛出异常所在的行号。

previous

异常链中的前一个异常。

ErrorException可以让错误信息被exception异常捕获处理,使用方法:

set_error_handler('error_handler');
set_exception_handler('exception_handler')
trigger_error('error_msg',E_USER_NOTICE);
function error_handler($no,$msg,$file,$line,$context)
{
	throw new ErrorException($msg, $no, 1, $file, $line);
}
function exception_handler($e)
{
	// $e is ErrorException
}

trigger_error 抛出一个错误后,set_error_handler会把这个错误递交给 error_handler 函数处理

error_handler函数抛出异常 ErrorException 

异常ErrorException被 set_exception_handler 指定的异常捕获函数 exception_handler 捕获,此时在 exception_handler 函数中的参数 $e 就是ErrorException


以此达到 抛出错误 错误被当作异常进行处理 的目标


4、错误与异常的区别


错误是 不该出现的信息  编码的时候避免出现的

异常是 业务逻辑  编码的时候设计的


其他解释:

error

绝大多数的错误都是非正常的,就根本不该出现的。合理的应用程序不应该去try/catch这种错误 

exception:

它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它


大笑









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值