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 相关文章推荐
php 连接mssql数据库 初学php笔记
Mar 01 PHP
linux iconv方法的使用
Oct 01 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
Yii列表定义与使用分页方法小结(3种方法)
Jul 15 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
php判断IP地址是否在多个IP段内
Aug 18 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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
python 排序算法总结及实例详解
2016/09/28 Python
python实现彩票系统
2020/06/28 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
python元组拆包实现方法
2021/02/28 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
自荐书格式
2013/12/01 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
经理聘任证明
2015/03/02 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis