PHP异常处理定义与使用方法分析


Posted in PHP onJuly 25, 2017

本文实例讲述了PHP异常处理定义与使用方法。分享给大家供大家参考,具体如下:

<?php
//php5提供了基本的异常处理类,可直接使用 ,不需要自己再定义
// class Exception
// {
// protected $message = 'Unknown exception'; // 异常信息
// protected $code = 0; // 用户自定义异常代码
// protected $file; // 发生异常的文件名
// protected $line; // 发生异常的代码行号
// function __construct($message = null, $code = 0);
// final function getMessage(); // 返回异常信息
// final function getCode(); // 返回异常代码
// final function getFile(); // 返回发生异常的文件名
// final function getLine(); // 返回发生异常的代码行号
// final function getTrace(); // backtrace() 数组
// final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
// /* 可重载的方法 */
// function __toString(); // 可输出的字符串
// }
?>
<?php
//定义一个顶级异常处理
function my_exception($e){
  echo "我是顶级异常处理".$e->getMessage();
}
//修改默认的顶级异常处理函数(器)
set_exception_handler("my_exception");
//我们使用异常机制
try{
  addUser("shunping");
  updateUser("xiaoming1");
}
//catch用来 捕获异常, Exception 是异常类(是php定义好一个类)
catch(Exception $e){
  //返回异常信息
  echo "返回异常信息(失败信息) =".$e->getMessage()."<br/>";
  echo "返回异常代码 =".$e->getCode()."<br/>";
  echo "返回发生异常的文件名 =".$e->getFile()."<br/>";
  echo "返回发生异常的代码行号 =".$e->getLine()."<br/>";
  //echo " =".$e->getTrace()."<br/>"; // backtrace() 数组
  //可以继续抛出,这时将会启动php默认的异常处理器来处理
  //你也可以自己定义一个顶级异常处理器,对其进行处理
  throw $e;
}
function addUser($username){
  if($username=="shunping"){
    //添加ok
    echo "ok1";
  }else{
    //添加error
    //抛出异常.
    throw new Exception("添加失败");
  }
}
function updateUser($username){
  if($username=="xiaoming"){
    //正常修改
    echo "ok2";
  }else{
    //平抛出异常
    throw new Exception("修改失败");
  }
}
?>

异常使用的注意事项 :

通过上面的案例,我们可以看出,使用

try{
    //代码
}catch(Exception $e){
    //对异常处理
}

这种方式,可以更有效的控制错误.所以在开发中大量的使用.

1. 当捕获到一个异常后,try{} 块里的后续代码不继续执行.
2. 如果有一个异常发生,但是你没有catch 捕获,则提示一个Uncaught Exception.(系统.)
3. 当catch一个异常,你可以处理,也可以不处理,不处理就可以
throw new Exception("信息");

4. 你可以自定义异常类

class MyException extends Exception {
}

5. 使用多个 catch 代码块可以捕获不同种类的异常

try{
    //代码....
  //第一句话
  //第二句话
}catch(PDOException $e){
    //
}catch(Exception $e){
|
}

6. 也可简单使用 Exception 捕获

代码说明:

<?php
    //定义了一个异常
    class MyException1 extends Exception{
    }
    class MyException2 extends Exception{
    }
    function A(){
       throw new MyException1("a");
    }
    function B(){
       throw new MyException2("b")
    }
    function C(){
       try{
           A();//抛出MyException1
           B();//抛出MyException2
       }catch(Exception1 $e1){
           $e1->getMessage();
       }catch(Exception2 $e2){
           $e2->getMesage();
       }
    }
?>

异常的规则

需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
使用多个 catch 代码块可以捕获不同种类的异常。
可以在 try 代码块内的 catch 代码块中抛出(再次抛出)异常。
简而言之:如果抛出了异常,就必须捕获它。或者使用顶级异常处理器处理。
如果不抛,即使有异常也不会捕获,不会处理

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php5新改动之短标记启用方法
Sep 11 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
php中error与exception的区别及应用
Jul 28 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 PHP
PHP实现防盗链的方法分析
Jul 25 #PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 #PHP
php 删除指定文件夹的实例讲解
Jul 25 #PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 #PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 #PHP
PHP实现的登录页面信息提示功能示例
Jul 24 #PHP
PHP检查网站是否宕机的方法示例
Jul 24 #PHP
You might like
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP7新功能总结
2019/04/14 PHP
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
详解node中创建服务进程
2017/05/09 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中实现对list做减法操作介绍
2015/01/09 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
2015安全保卫工作总结
2015/04/25 职场文书
技术入股合作协议书
2016/03/21 职场文书
创业计划书之便利店
2019/09/05 职场文书
Django如何与Ajax交互
2021/04/29 Python
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript