首页 > Web开发 > 详细

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

时间:2019-11-04 22:27:04      阅读:105      评论:0      收藏:0      [点我收藏+]

要使用异常,首先得知道那些部分会产生异常,产生什么类型异常(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

 

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

原文:https://www.cnblogs.com/zxcv123/p/11794698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!