您好,欢迎访问一九零五行业门户网

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 getcode().':'.$e->getmessage().'in'.$e->getfile().'on line'
 9     .$e->getline().'
';
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().'
';
11      
12  }
13  class  user_defined_exception  extends   exception
14  {
15       public   function  __tostring()
16      {
17           return   '
18                exception  ' . $this -> getcode() . ' : ' . $this -> getmessage() . ' in ' . $this -> getfile() . ' on line '
19              . $this -> getline() . ' ?
' ;
20      }
21  }
22  ?>   输出为:
exception 43:an exception occurs here!ing:\apache group\apache2.2\htdocs\test.phpon line4
总结,本章讨论了php异常的特点,与其他语言的一些不同之处。最后还介绍了自定义的异常。
其它类似信息

推荐信息