search

看完了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  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().'
';
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异常的特点,与其他语言的一些不同之处。最后还介绍了自定义的异常。
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Performance Tuning for High Traffic WebsitesPHP Performance Tuning for High Traffic WebsitesMay 14, 2025 am 12:13 AM

ThesecrettokeepingaPHP-poweredwebsiterunningsmoothlyunderheavyloadinvolvesseveralkeystrategies:1)ImplementopcodecachingwithOPcachetoreducescriptexecutiontime,2)UsedatabasequerycachingwithRedistolessendatabaseload,3)LeverageCDNslikeCloudflareforservin

Dependency Injection in PHP: Code Examples for BeginnersDependency Injection in PHP: Code Examples for BeginnersMay 14, 2025 am 12:08 AM

You should care about DependencyInjection(DI) because it makes your code clearer and easier to maintain. 1) DI makes it more modular by decoupling classes, 2) improves the convenience of testing and code flexibility, 3) Use DI containers to manage complex dependencies, but pay attention to performance impact and circular dependencies, 4) The best practice is to rely on abstract interfaces to achieve loose coupling.

PHP Performance: is it possible to optimize the application?PHP Performance: is it possible to optimize the application?May 14, 2025 am 12:04 AM

Yes,optimizingaPHPapplicationispossibleandessential.1)ImplementcachingusingAPCutoreducedatabaseload.2)Optimizedatabaseswithindexing,efficientqueries,andconnectionpooling.3)Enhancecodewithbuilt-infunctions,avoidingglobalvariables,andusingopcodecaching

PHP Performance Optimization: The Ultimate GuidePHP Performance Optimization: The Ultimate GuideMay 14, 2025 am 12:02 AM

ThekeystrategiestosignificantlyboostPHPapplicationperformanceare:1)UseopcodecachinglikeOPcachetoreduceexecutiontime,2)Optimizedatabaseinteractionswithpreparedstatementsandproperindexing,3)ConfigurewebserverslikeNginxwithPHP-FPMforbetterperformance,4)

PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools