一下内容纯属于个人笔记
PHP中的异常处理(在没有关闭php.ini中的错误提示下)
在PHP中异常和错误是不一样的,异常是出现正常逻辑之外的情况,而错误是指运行时出错了,比如调用了一个没有定义的东东!
通常可以使用
try{
}catch(Exception $e){
echo $e->getMessage();
}
但是,这里并不是所有的异常和错误都能够捕获到的,这里仅仅可以来捕捉有throw抛出的异常,所以如果没有设置自定义的异常处理,假设直接使用以上那个,是解决不了警告或者致命错误的,例如,我需要读取某一个目录下的所有文件及目录
try{
if($handle = opendir("/home")) { while($file=readdir($handle)){} }catch(Exception $e){}
在这里会出现相应的警告Warning: opendir(/home/huyouheng/.gnupg): failed to open dir: Permission denied in/home/huyouheng/workspace/php/pdo/File.php,权限拒绝
所以在这里自定义一个处理异常的方法
function myErrorHandler(){ throw new Exception("文件打开失败", 0); }
这里很简单的定义了一个抛出异常的方法,然后用函数set_error_handler($this->myErrorHandler()); 或者用set_exception_handler来设置处理错误的方法,这个函数一定要放在你的try里面,不然没有用
try{ set_error_handler($this->myErrorHandler()); $handle = opendir($p); while($file=readdir($handler)){} //............ }catch(Exception $e){ echo $e->getMessage();}
这样的话就会走你自定义异常方法,在捕获到做相应的处理!一定要被捕获到,否则也会报错,方法很多种,自己根据需求进行!
HP7实现了一个全局的throwable接口,于是,PHP7中更多的Error变为可捕获的Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。这些可被捕获的Error通常都是不会对程序造成致命伤害的Error,比如未定义的东西!
参考文献:http://php.net/manual/zh/class.exception.php