本PHP教程主要学习php异常处理
PHP的错误处理为我们在程序遇到错误时提供了相关的错误信息,我们可以依靠PHP本身的错误处理规则来处理所发生的错误,你还可以更灵活的自定义错误处理程序,那就是上节我们所了解到的set_error_handler()函数。这个错误处理函数接受一个你所定义的错误函数,这个你所定义的错误处理函数的参数在2~5个之间。这是上节我们没有了解到的,在此补充一下。
在其它的面向对象的编程语言中,不管是JAVA、还是C++或者其它的那怕是JAVASCRIPT也提供了异常(Exception)处理,那么什么叫异常呢?
什么叫异常呢
一句话:在指定的错误发生时改变脚本的正常流程。
在PHP5中我们才有机会接触到异常处理,同样它的语法也是借用了C++中经典的语法形式,即:
try{
if 发生错误
那么 throw excepting(”抛出错误信息”)
}catch(捕获上面抛出的信息){
处理这个错误
}
上面这只是一段伪代码,只是说明异常处理的一般流程。当异常发生时,通常会发生以下情况:
1.当前正被执行的代码会被保存下来
2.代码会被切换至异常处理函数处
3.根据你所定义的流程,代码可能终止执行或者执行其他脚本
异常的基本使用原则
通过伪代码我们可以看到当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 “catch” 代码块。但是如果你的异常没有被捕获,那么同样也会发生一个致使的错误。
下面的代码由于没有捕获这个异常,将会发生一个:
Fatal error: Uncaught exception ‘Exception’ with message ‘除数不能为0′ in…的错误。
<?php
function check_divisor($num){
if($num==0){
throw new Exception("除数不能为0");
}
return true;
}
check_divisor(0);
?>
所以我们要用适当的代码来正确处理这个异常。
处理程序应当是下面这个样子:
1.Try – 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
2.Throw – 这里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”
3.Catch – “catch” 代码块会捕获异常,并创建一个包含异常信息的对象
让我们来为上面的代码加一个异常处理的过程吧:
<?php
function check_divisor($num){
if($num==0){
throw new Exception("除数不能为0");
}
return true;
}
try{
check_divisor(0);
}
catch(Exception $e){
echo 'Error Message:'.$e->getMessage();
// echo 'Error File:'.$e->getFile();
// echo 'Error Code:'.$e->getCode();
// echo 'Error Line:'.$e->getLine();
// echo 'Error Trace:'.$e->getTrace();
//echo 'Error TraceAsString:'.$e->getTraceAsString();
}
?>
通过对比伪代码我们应该能够理解这个错误处理流程!再次查看这段代码,我们发现它已经能够处理异常了:
Error Message:除数不能为0
下面是这段代码的简单解析:
1.创建 check_divisor() 函数。它检测$num是否为0。如果是,则抛出一个异常。
2.在 “try” 代码块中调用 check_divisor() 函数,把$num设为0。
3.check_divisor() 函数中的异常被抛出。
4.”catch” 代码块接收到该异常,并实例化一个包含异常信息的对象 ($e)。
5.通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。
补充说明exception类包括6个方法,我在代码已经例出。大家一看就能明白是什么意思。getTrace()和getTraceAsString()差不多,只不过前者输出一个数组,而后者而是一个string。
说明:exception类是一个基类,我们可以扩展这个类,但你不能覆盖exception类中的任何方法,因为使用了final关键字。