原文:PHP 15:异常
看完了out_put_fns.php文件,让我们再看看db_fns.php文件。其代码非常简单,如下:
其作用是连接数据库,并返回一个数据库连接。在这里我们暂且不提数据库连接,因为第7行的代码是抛出一个异常的。所以我们先讨论PHP的异常,然后在下一章节中专门讲解数据库的操作等。
PHP的异常机制和Java等语言差不多。但是还是有区别的。
PHP的异常同样是以try...throw...catch来捕获异常。
在某些语言,例如C#,Java,try里的代码有的时候会自动抛出异常,但是载PHP中,你必须手动捕获这个异常。和其他语言一样,PHP也会判断合适的异常抛出,那就是后面catch的作用了。
PHO也有异常的类。让我们先看一个例子,代码如下:
?>
它将输出:
这里我们看到了Exception类的使用。如果你对C#和Java熟悉的话,相信不是很难看懂。
PHP5提供了Exception类,其构造时需要2个参数,一个是异常消息,一个是异常代码。
除了构造函数之外,它还包括以下函数。
- getCode()--返回传递给构造函数的代码。
- getMessage()--返回给构造函数的消息。
- getFile()--返回产生异常的代码的文件的完整路径。
- getLine()--返回产生异常代码的行号。
- getTrace()--返回一个产生异常的代码以及回退路径,这个和.net里的异常,当你编写一个ASP.NET页面时,如果发生异常,.net会将错误的信息,所在的文件,以及回退路径信息全部提供给你。
- getTraceAsString()--与getTrace()一样,只不过它将格式化为字符串。
- __toString()--允许简单的显示Exception对象,并且给出所有以上方法给出的信息。
可以调用 echo $e显示所有信息。例如上面的代码如此调用,结果是
和其他语言一样,PHP也可以自定义Exception类。
幸运的是PHP提供了Exception的代码。让我们一睹为快。
让我们看看这个类,如果我们打算自定义自己的异常,必须从继承这个类。看样子只有__toString可以重写,因为其他的方法都有final关键字,说明子类是没法重写的。看看下面的例子吧:
输出为:
Exception 43:An Exception occurs here!inG:\Apache Group\Apache2.2\htdocs\test.phpon line4 |
总结,本章讨论了PHP异常的特点,与其他语言的一些不同之处。最后还介绍了自定义的异常。