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源代码数组统计count分析
Aug 02 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
3种php生成唯一id的方法
Nov 23 PHP
php制作简单模版引擎
Apr 07 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
php中分页及SqlHelper类用法实例
Jan 12 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
php实现小程序支付完整版
Oct 09 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 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 SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
详解python while 函数及while和for的区别
2018/09/07 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
设备收款委托书范本
2014/10/02 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
MySQL创建表操作命令分享
2022/03/25 MySQL
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技