使用PHP编程时,虽然可以跟踪异常的路线,但是在实际应用中需要使用不同的异常处理类处理不同的异常。
所以,PHP扩展异常处理类就产生了。
例如:
<?php
class FileExists extends Exception
{
//文件不存在异常
}
class FileOpen extends Exception
{
//文件不能打开异常
}
$path = "E://www.phpdo.net";
try
{
open_file($path);
}
catch(FileExists $e)
{
echo "程序运行异常: ".$e->getMessage()."\n";
}
catch(FileOpen $e)
{
echo "程序运行异常,".$e->getMessage()."\n";
}
catch(Exception $e)
{
echo "不可预知的异常";
echo "异常信息:".$e->getMessage()."\n";
echo "异常代码:".$e->getCode()."\n";
echo "文件名:".$e->getFile()."\n";
echo "异常代码所在的行".$e->getLine()."\n";
echo "异常信息传递路线:";
print_r($e->getTrace()); //返回数组形式的传递路线
echo $e->getTraceAsString(); //返回字符串形式的传递路线
}
function open_file($path)
{
if(!file_exists($path))
{
//抛出FileExists异常
throw new FileExists("www.phpdo.net不存在",1);
}
if(!fopen("$path",r))
{
//抛出FileOpen异常
throw new FileOpen("www.phpdo.net无法打开",2);
}
}
?>
结果:
程序运行异常: http://www.phpdo.net/不存在
php扩展异常处理类时需要注意的是:
- 捕获特定异常时,还需要捕获Exception类,用于处理未捕获的异常;
- 捕获异常时,需要按照顺序从上向下捕获(如果先捕获Exception类,则会导致异常不能被正确的代码处理,例如将“catch(Exception $e)“语句放到“catch(FileExists $e)”之前,会发生什么?)所以在设定时,需要将特定异常的catch语句写在前面,将一般的Exception语句写在最后。
根据这个例子,看出使用php扩展异常处理类的优点是什么呢?
提高代码的可读性,使得不同的异常容易被区分;
- 可自定义扩展类;
- 根据不同的异常做出不同的反应。








最新评论
再来浏览一次,上次没看懂。
:evil: 不错啊
博主的技术文章很有帮助
好文章,关注啦!谢谢博主分享
你好 来学习下
我来了哦
第一次来访留个记号
呵呵,哥们越来越勤奋了啊 :
php点点通,(www.ph
:eek: :eek: