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

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

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

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

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

这里捕捉的是PDO类异常:

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

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

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

自定义异常类,MyException类

 <?php
class MyException1 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
class MyException2 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
class MyException3 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
try{
$a = 2;
switch( true ){
case $a > 3:
throw new MyException3( '变量大于3,超载!', 253 );
break;
case $a > 2:
throw new MyException2( '变量大于2,超载!', 252 );
break;
default:
throw new MyException1( '变量没有定义!', 250 );
break;
} }catch( MyException3 $e ){
// 处理异常
$e ->show_exception_info();
}catch( MyException2 $e ){
// 处理异常
$e ->show_exception_info();
}catch( MyException1 $e ){
// 处理异常
$e ->show_exception_info();
}finally{
echo '最终我还是执行了!';
}

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

 function show_exception_info( $e ){
echo '异常信息:'.$e ->getMessage().PHP_EOL,
'异常编号:'.$e ->getCode().PHP_EOL,
'异常行号:'.$e ->getLine().PHP_EOL,
'异常文件:'.$e ->getFile().PHP_EOL;
}
set_exception_handler( 'show_exception_info' );
throw new Exception( '异常信息传过去!', 22222 );
异常信息:异常信息传过去!
异常编号:22222
异常行号:9
异常文件:D:\workspace\project_shop\test.php

最新文章

  1. 从零开始山寨Caffe&#183;肆:线程系统
  2. Spring整合MyBatis
  3. bootstrap-datepicker带中文的js文件
  4. 【CodeForces 697B】Barnicle
  5. MSBuild简单介绍
  6. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
  7. [Excel]C#操作Excel(导入导出)
  8. 将数据库中的表注册到K2服务中,并封装为Smart Object
  9. Differential Geometry之第一章欧式空间
  10. js方法重载
  11. Python学习(五) Python数据类型:列表(重要)
  12. Recipes — Bottle 0.13-dev documentation
  13. WiresShark 使用方法
  14. shiro基础学习(四)&mdash;shiro与项目整合
  15. log4g 使用教程
  16. vim7.3中文乱码问题
  17. 分支&amp;循环
  18. CVE-2017-8912 CMS Made Simple命令执行
  19. bzoj 3522 / 4543 [POI 2014] Hotel - 动态规划 - 长链剖分
  20. Git-遇到的问题以及解决方法

热门文章

  1. T-MAX组--项目冲刺(第五天)
  2. [设计原则与模式] 如何理解TDD的三条规则
  3. uSurvival 1.41多人在线生存逃杀吃鸡类游戏源码
  4. JVM 初始化阶段例子 final常量
  5. git clone时报错“Failed to connect to 127.0.0.1 port 2453: Connection refused”如何处理?
  6. tomcat NIOEndpoint中的Acceptor实现
  7. Scala里面的排序函数的使用
  8. windows10 环境下的amqp安装步骤(图文)
  9. 宣化上人:大佛顶首楞严经四种清净明诲浅释(1)(转自学佛网:http://www.xuefo.net/nr/article23/230609.html)
  10. 【翻译】Flink 异步I / O访问外部数据