PHP 15:异常

原文:PHP 15:异常
看完了out_put_fns.php文件,让我们再看看db_fns.php文件。其代码非常简单,如下:

 1 <?php
 2 
 3 function db_connect()
 4 {
 5    $result = new mysqli('localhost', 'bm_user', 'password', 'bookmarks'); 
 6    if (!$result)
 7      throw new Exception('Could not connect to database server');
 8    else
 9      return $result;
10 }
11 
12 ?>

其作用是连接数据库,并返回一个数据库连接。在这里我们暂且不提数据库连接,因为第7行的代码是抛出一个异常的。所以我们先讨论PHP的异常,然后在下一章节中专门讲解数据库的操作等。
 PHP的异常机制和Java等语言差不多。但是还是有区别的。
PHP的异常同样是以try...throw...catch来捕获异常。
在某些语言,例如C#,Java,try里的代码有的时候会自动抛出异常,但是载PHP中,你必须手动捕获这个异常。和其他语言一样,PHP也会判断合适的异常抛出,那就是后面catch的作用了。
PHO也有异常的类。让我们先看一个例子,代码如下:


 1 <?php
 2 try
 3 {
 4     throw new Exception('An Exception occurs here!',43);
 5 }
 6 catch(Exception $e)
 7 {
 8     echo 'Exception '.$e->getCode().':'.$e->getMessage().'in'.$e->getFile().'on line'
 9     .$e->getLine().'<br/>';
10     
11 }
12 ?> 

它将输出:

Exception43:An Exception occurs here!inG:\Apache Group\Apache2.2\htdocs\test.phpon line4

这里我们看到了Exception类的使用。如果你对C#和Java熟悉的话,相信不是很难看懂。
PHP5提供了Exception类,其构造时需要2个参数,一个是异常消息,一个是异常代码。
除了构造函数之外,它还包括以下函数。

  • getCode()--返回传递给构造函数的代码。
  • getMessage()--返回给构造函数的消息。
  • getFile()--返回产生异常的代码的文件的完整路径。
  • getLine()--返回产生异常代码的行号。
  • getTrace()--返回一个产生异常的代码以及回退路径,这个和.net里的异常,当你编写一个ASP.NET页面时,如果发生异常,.net会将错误的信息,所在的文件,以及回退路径信息全部提供给你。
  • getTraceAsString()--与getTrace()一样,只不过它将格式化为字符串。
  • __toString()--允许简单的显示Exception对象,并且给出所有以上方法给出的信息。

 可以调用 echo $e显示所有信息。例如上面的代码如此调用,结果是

exception 'Exception' with message 'An Exception occurs here!' in G:\Apache Group\Apache2.2\htdocs\test.php:4 Stack trace: #0 {main}

和其他语言一样,PHP也可以自定义Exception类。
幸运的是PHP提供了Exception的代码。让我们一睹为快。

 1 <?php
 2 class Exception
 3 {
 4    protected $message = 'Unknown exception';  // exception message
 5    protected $code = 0;                        // user defined exception code
 6    protected $file;                            // source filename of exception
 7    protected $line;                            // source line of exception
 8 
 9    function __construct($message = null, $code = 0);
10 
11    final function getMessage();                // message of exception
12    final function getCode();                  // code of exception
13    final function getFile();                  // source filename
14    final function getLine();                  // source line
15    final function getTrace();                  // an array of the backtrace()
16    final function getTraceAsString();          // formated string of trace
17 
18    /* Overrideable */
19    function __toString();                      // formated string for display
20 }
21 ?> 

让我们看看这个类,如果我们打算自定义自己的异常,必须从继承这个类。看样子只有__toString可以重写,因为其他的方法都有final关键字,说明子类是没法重写的。看看下面的例子吧:

 1 <?php
 2 try
 3 {
 4     throw new user_defined_exception('An Exception occurs here!',43);
 5 }
 6 catch(user_defined_exception $e)
 7 {
 8     echo $e;
 9     //echo 'Exception '.$e->getCode().':'.$e->getMessage().'in'.$e->getFile().'on line'
10     //.$e->getLine().'<br/>';
11     
12 }
13 class user_defined_exception extends Exception
14 {
15     public function __toString()
16     {
17         return '<table border><tr><td>
18               <strong><font color=red>Exception '.$this->getCode().':'.$this->getMessage().'in'.$this->getFile().'on line'
19            .$this->getLine().'</font></strong></td?</tr></table>';
20     }
21 }
22 ?> 

输出为:

Exception 43:An Exception occurs here!inG:\Apache Group\Apache2.2\htdocs\test.phpon line4

总结,本章讨论了PHP异常的特点,与其他语言的一些不同之处。最后还介绍了自定义的异常。

时间: 2024-10-31 09:08:24

PHP 15:异常的相关文章

简明Python3教程 15.异常

简介 当程序发生意外情况时则产生异常. 例如你需要读一个文件而这个文件并不存在会咋样?又或者是程序运行时你把它误删除了呢? 上述情形通过异常进行处理. 类似的,如果你的程序存在一些非法语句会发生什么呢?这时python会举手告诉你存在一个错误.   错误 考虑一个简单的print函数调用.如果我们把print错拼成Print(注意大小写),这时python将引发一个语法错误.     >>> Print('Hello World')     Traceback (most recent

简明Python3教程(A Byte of Python 3)

 关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程    简明Python3教程<A Byte of Python3>是一本关于用Python3语言编程的书.可以作为初学这的入门教程.也可以供计算机相关人员参考. 本书可作为Python编程语言的指导或辅导.主要是针对新手的,当然,对于有经验的程序员也很有用.如果你所了解的计算机的知识就是如何保存文本文

A Byte of Python(简明Python教程) for Python 3.0 下载

A Byte of Python v1.92 (for Python 3.0) 官方下载地址,当前(20120730)  最新版本 1.92 基于Python3的 下载: http://files.swaroopch.com/python/byte_of_python_v192.pdf在线阅读:http://www.cnblogs.com/txw1958/archive/2012/12/10/A_Byte_of_Python3.html 简明Python3教程<A Byte of Python3

win7系统报错getOutputStream() has already been called for this response.但是xp系统没问题...

问题描述 最近这个问题搞的很头疼,debug过了,action中执行到return "SUCCESS"就报出错误堆栈了,所以应该是jsp文件写的有问题,JSP文件中根本就没有发现getOutputStream(),引入的文件中也没有    而且更奇怪的是,在我开发的机器上和经理的电脑上都报这个错误,但是在业务的员工的电脑上没出现这个错误,所以推测是代码的某些部分可能存在不兼容的问题,因为我的电脑和经理的电脑是win7的系统,业务的员工的电脑是XP的系统,然后再测试人员的电脑上面进xp的

PHP系列目录

原文:PHP系列目录PHP系列的对象是已经熟悉了一门或多门语言的开发人员.如果你是其中一份子,而且你也打算学习PHP,相信你根据本系列会很快掌握PHP的.欢迎大家给出意见或建议.同时也欢迎大家的批评与板砖.目录如下: PHP 1:在Windows上安装和配置PHP,Apache和My SQL PHP 2:从一个实例介绍学习方法 PHP 3:从Login界面谈PHP标记 PHP 4:从Login进一步看到的 PHP 5:PHP语法导向 PHP 6:PHP 基本数据类型 PHP 7: PHP 变量和

《Python参考手册(第4版•修订版)》——1.15 异常

1.15 异常 如果程序中出现错误,就会引发异常,并显示类似下面的回溯消息: Traceback (most recent call last): File "foo.py", line 12, in <module> IOError: [Errno 2] No such file or directory: 'file.txt' 该回溯消息指出了所发生的错误类型及位置.通常情况下,错误会导致程序终止.但是可以使用try和except语句捕捉并处理异常,如下所示: try:

下载界面出现15秒之后抛异常 无法完成下载操作

问题描述 问题描述:当下载窗口出现时 立即点下载可以下,但当先不点下载,等不到15秒,后台就会报异常,且此时点下载将无法下载  下载代码: Java代码 解决方案 楼主把缓存设小一点,把bout.flush(); 移到循环里面试试.解决方案二:换个小一点的文件,bout和os不close,再试试看.tomcat前面还有其他东西吗?会不会是连接时间过长或传输内容过大被服务器主动cut掉了?

JAVA【异常二】异常处理机制

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下,异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出.   在Java 应用程序中,异常处理机制为:抛出异常,捕捉异常. 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运

捕获线程中的异常

由于线程的本质特性,使得你不能捕获从线程中逃逸的异常.一旦异常逃出任务的run()方法它就会向外传播到控制台,除非你采取特殊的步骤捕获这种错误的异常.在Java SE5之前,你可以使用线程组来捕捉这种异常,但是有了Java SE5,就可以用Executor来解决这个问题了. 下面的任务总是会抛出一个异常,该异常会传播到其run()方法的外部,并且main()展示了当你运行它时所发生的事情: ? 1 2 3 4 5 6 7 8 9 10 11 12 import java.util.concurr