努力思考 + 实践, 眼高手低是不行的. 注册 | 登陆

用实例分析PHP5异常处理,一看就懂

PHP代码
  1. <?php   
  2. /**  
  3. * ■㈠PHP5的异常处理  
  4.  
  5. * PHP 5 添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw   
  6. * 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以  
  7. * 便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch   
  8. * 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配  
  9. * 所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP   
  10. * 允许在 catch 代码块内再次抛出(throw)异常。   
  11. * 当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续  
  12. * 执行,而 PHP 就会尝试查找第一个能与之匹配的 catch。如果一个异常没有被捕获,而  
  13. * 且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一  
  14. * 个严重的错误,并且输出 Uncaught Exception ... (未捕获异常)的提示信息。   
  15. */  
  16.   
  17. /**  
  18. * Exception.php  
  19.  
  20. * ■㈡PHP5内置的异常类的属性与方法  
  21. * 以下这段代码只为说明内置异常处理类的结构,它并不是一段有实际意义的可用代码。  
  22. */  
  23.   
  24. class Exception{   
  25.     protected $message = 'Unknown exception'// 异常信息   
  26.     protected $code = 0; // 用户自定义异常代码   
  27.     protected $file// 发生异常的文件名   
  28.     protected $line// 发生异常的代码行号   
  29.   
  30.     function __construct($message = null, $code = 0);   
  31.     final function getMessage(); // 返回异常信息   
  32.     final function getCode(); // 返回异常代码(代号)   
  33.     final function getFile(); // 返回发生异常的文件名   
  34.     final function getLine(); // 返回发生异常的代码行号   
  35.     final function getTrace(); // backtrace() 数组   
  36.     final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息   
  37.   
  38.     //可重载的方法   
  39.     function __toString(); // 可输出的字符串   
  40. }   
  41.   
  42. ?>  
PHP代码
  1. <?php   
  2. /**  
  3. * syntax .php  
  4. */  
  5.   
  6. //■㈢语法结构以及分析   
  7.   
  8. //PHP有两种抛出异常的格式,如下   
  9.   
  10. //【1】try...catch...   
  11. try {   
  12.     //实行可能有异常的操作,比如数据库错作,文件错作   
  13. }catch (Exception $e){   
  14.     //打印错误信息   
  15. }   
  16.   
  17. //【2】throw   
  18. $message = '我必须被运行在try{}块中,出现异常的话我($message)将被返回(传递)给catch()里的异常对象的实例比如上面的$e';   
  19. $code = 123; //错误代码号,可在catch块中用$e->getCode();返回我的值 123,这样我就可以自定义错误代码号   
  20.   
  21. throw new Exception($message,$code);   
  22.   
  23. //学JAVA的注意,PHP异常处理没有throws   
  24.   
  25. ?>  
PHP代码
  1. <?php   
  2. /**  
  3. * Example.php  
  4. */  
  5. //■㈣两个实例掌握PHP异常处理   
  6.   
  7.   
  8. //例【1】用 try...catch    
  9. /* PDO连接mysql数据库,如果没看过PDO,先看下PDO的构造函数,要不跳过例1看例2 */  
  10. $dsn = 'mysql:host=localhost;dbname=testdb';   
  11. $user = 'dbuser';   
  12. $password = 'dbpass';   
  13.   
  14. try {   
  15.     $dbh = new PDO($dsn$user$password); //创建数据库连接对象容易出现异常   
  16.     echo '如果上面出现异常就不能显示我了';   
  17. } catch(PDOException $e) {   
  18.     echo 'Connection failed: ' . $e->__toString();   
  19. }   
  20. ?>   
  21.   
  22. <?php   
  23. //例[2] try..cathc 和 throw一起用   
  24. try {   
  25.     $error = '我抛出异常信息,并且跳出try块';   
  26.     if(is_dir('./tests')){   
  27.         echo 'do sth.';   
  28.     }else{   
  29.         throw new Exception($error,12345);   
  30.     }   
  31.     echo '上面有异常的话就轮不到我了!~<br />',"\n";   
  32. } catch(Exception $e) {   
  33.     echo '捕获异常: '$e->getMessage(),$e->getCode(), "\n<br />"//显示$error和123456   
  34. }   
  35. echo '继续执行';   
  36. ?>   
  37.   
  38. <?php   
  39. //PHP的一场处理相对于JAVA来说,容易学多了,因为JAVA有太多的异常类,还有throws等   
  40. ?>  

Tags: php, 技巧

« 上一篇 | 下一篇 »

只显示5条记录相关文章

Notepad++运行PHP, Python (浏览: 4015, 评论: 0)
守护进程删除smarty的缓存文件(注释版) (浏览: 3429, 评论: 0)
Php ini_set ini_get可操作配置参数列表 (浏览: 9136, 评论: 1)
资料备忘,保持更新。 (浏览: 6039, 评论: 0)
40个迹象表明你还是PHP菜鸟 (浏览: 4218, 评论: 2)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

本文因为某种原因此时不允许访客进行评论