PHP异常和错误(2)异常的基本处理:try

2017-03-16 13:21:34 admin ...

前言:

异常是程序运行中不符合预期的情况,以及与正常流程不同的情况。属于逻辑和业务中断的情况,不属于语法错误。但是,异常不处理,在php中会议错误的形式出现,so,我们一起来看看PHP中是怎么处理异常的。

内容概要:

1、异常基本处理:try,throw和catch

2、异常基本处理的总结

一、异常基本处理:try,throw和catch

在PHP中,我们可以使用try,throw和catch的方式对异常进行抛出和捕获。

我们先看不处理的情况:

$a = 'PHP在路上';
echo 4/$a;

运行结果显示:

Warning: Division by zero in /Users/haodaquan/Sites/Test/exception/index.php on line 19

这个实验其实是试图利用除零的方式抛出一个异常,结果,在没有处理的情况下,PHP直接返回了错误的提示。

而对于除零问题,JAVA的处理方式就比较方便,它的内置类会直接获取这个异常情况。

继续,我们试着利用try threw抛出异常,并使用catch方式捕获进行处理:

$a = 'PHP在路上';
try {
    if ($a === 0) {
        throw new ZeroException("Error Processing Request1", 1);
    }else
    {
        throw new MyException("Error Processing Request2", 1);
    }
    echo 4/$a;
} catch(MyException $e) {
    echo $e->getMessage();
}

运行结果:

Error Processing Request

可以看出,这次我们成功捕获了异常,并对异常进行打印处理。但是,但是,但是,如果我们不在try模块中抛出异常的话,我们是无法捕获异常的。(这不是if else处理方式吗?)。

exception是一个PHP内置的异常处理类,下一节我们详细讨论,这里只需要知道他能捕获错误就行了。

继续,我们看抛出多个异常的写法:

$a = 'PHP在路上';

try {
    if ($a === 0) {
        throw new ZeroException("Error Processing Request1", 1);
    }else
    {
        throw new MyException("Error Processing Request2", 1);
    }
    echo 4/$a;
} catch (ZeroException $e) {
    echo $e->getMessage();
}
catch(MyException $e) {
    echo $e->getMessage();
}

class ZeroException extends Exception
{
    public function errorMessage()
    {
        //error message
        return 'Zero:'.$this->getMessage();
    }
}

class MyException extends Exception
{
    public function errorMessage()
    {
        //error message
        return 'MyMessage:'.$this->getMessage();
    }
}

运行结果:

Error Processing Request2

到这里可以看出,PHP的异常处理,越来越像if else了(以后我们会纠正这个观点)。我们可以看出,PHP异常处理每手工抛出一个异常,就要有一个而且至少一个异常处理类相对应(当然,可以直接使用exception类),这句话的意思是:我们可以使用exception类来抛出和捕获所有的异常,不过这样,处理异常就显得有点麻烦了。

二、异常基本处理的总结

我们今天通过例子,了解PHP处理异常的基本方法:try,throw和catch,由此,我们得出以下结论,请大家探讨。

1、PHP的异常是必须手工抛出的,否则就是错误。

2、每个 throw 必须对应一个 catch,即有异常抛出,就必须捕获。

3、PHP异常处理机制是不完善的(相比较JAVA),处理异常比较繁琐。

相似文章