现在的位置: 首页php-基础语法>正文
php扩展异常处理类  
发表于724 天前 php-基础语法 评论关闭

使用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扩展异常处理类的优点是什么呢?

提高代码的可读性,使得不同的异常容易被区分;

  • 可自定义扩展类;
  • 根据不同的异常做出不同的反应。

报歉!评论已关闭.

不想听你唠叨×