php异常处理面向对象和面向函数使用

要使用异常,首先得知道那些部分会产生异常,产生什么类型异常(php常见异常见下方符表),对产生的异常该怎么办。

如果知道程序的那些部分会产生异常,那么就对这一部分使用try关键字;

如果知道了产生异常的部分产生的是什么类型的异常,那么就可以使用throw关键字抛出这个异常类的实例,要是不知道是什么类型的异常,那就用基类Exception

当知道了程序会产生什么类型的异常,也抛出了异常,最后就可以使用catch关键字捕获并处理异常。

首先用面向对象的方法来实现上面的思路。

这里捕捉的是PDO类异常:

 1 <?php
 2 try{
 3     $dsn = 'mysql:127.0.0.1;db_name=user';
 4     $pdo = new PDO( $dsn, 'roo', 'root' );
 5 //    自己写的代码不需要抛出PDO异常实例
 6 }catch( PDOException $e ){
 7 //    获得异常信息
 8     echo '异常信息:'.$e ->getMessage().PHP_EOL,
 9         '异常编号:'.$e ->getCode().PHP_EOL,
10         '异常行号:'.$e ->getLine().PHP_EOL,
11         '异常文件:'.$e ->getFile().PHP_EOL;
12 }
 异常信息:SQLSTATE[HY000] [1045] Access denied for user 'roo'@'localhost' (using password: YES)
异常编号:1045
异常行号:4
异常文件:D:\workspace\project_shop\test.php

使用所有异常类的基类,Exception类。

 1 <?php
 2 try{
 3     $a;
 4     throw new Exception( '变量没有定义!', 250 );
 5 }catch( Exception $e ){
 6 //    处理异常
 7     echo '异常信息:'.$e ->getMessage().PHP_EOL,
 8         '异常编号:'.$e ->getCode().PHP_EOL,
 9         '异常行号:'.$e ->getLine().PHP_EOL,
10         '异常文件:'.$e ->getFile().PHP_EOL;
11 }
异常信息:变量没有定义!
异常编号:250
异常行号:4
异常文件:D:\workspace\project_shop\test.php

自定义异常类,MyException类

 1 <?php
 2 class MyException1 extends Exception  {
 3     public function show_exception_info(){
 4         echo '异常信息:'.$this ->getMessage().PHP_EOL,
 5             '异常编号:'.$this ->getCode().PHP_EOL,
 6             '异常行号:'.$this ->getLine().PHP_EOL,
 7             '异常文件:'.$this ->getFile().PHP_EOL;
 8     }
 9 }
10 class MyException2 extends Exception  {
11     public function show_exception_info(){
12         echo '异常信息:'.$this ->getMessage().PHP_EOL,
13             '异常编号:'.$this ->getCode().PHP_EOL,
14             '异常行号:'.$this ->getLine().PHP_EOL,
15             '异常文件:'.$this ->getFile().PHP_EOL;
16     }
17 }
18 class MyException3 extends Exception  {
19     public function show_exception_info(){
20         echo '异常信息:'.$this ->getMessage().PHP_EOL,
21             '异常编号:'.$this ->getCode().PHP_EOL,
22             '异常行号:'.$this ->getLine().PHP_EOL,
23             '异常文件:'.$this ->getFile().PHP_EOL;
24     }
25 }
26 try{
27     $a = 2;
28     switch( true ){
29         case $a > 3:
30             throw new MyException3( '变量大于3,超载!', 253 );
31             break;
32         case $a > 2:
33             throw new MyException2( '变量大于2,超载!', 252 );
34             break;
35         default:
36             throw new MyException1( '变量没有定义!', 250 );
37             break;
38     }
39 
40 }catch( MyException3 $e ){
41 //    处理异常
42     $e ->show_exception_info();
43 }catch( MyException2 $e ){
44 //    处理异常
45     $e ->show_exception_info();
46 }catch( MyException1 $e ){
47 //    处理异常
48     $e ->show_exception_info();
49 }finally{
50     echo '最终我还是执行了!';
51 }

虽然上面提到需要用catch捕获异常,但下面的就不用:

1 function show_exception_info( $e ){
2     echo '异常信息:'.$e ->getMessage().PHP_EOL,
3     '异常编号:'.$e ->getCode().PHP_EOL,
4     '异常行号:'.$e ->getLine().PHP_EOL,
5     '异常文件:'.$e ->getFile().PHP_EOL;
6 }
7 set_exception_handler( 'show_exception_info' );
8 throw new Exception( '异常信息传过去!', 22222 );
异常信息:异常信息传过去!
异常编号:22222
异常行号:9
异常文件:D:\workspace\project_shop\test.php
扫描二维码关注公众号,回复: 7745098 查看本文章

猜你喜欢

转载自www.cnblogs.com/zxcv123/p/11794698.html