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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
20个PHP常用类库小结
Sep 11 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php实现过滤表单提交中html标签的方法
Oct 17 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
PHP实现cookie跨域session共享的方法分析
Aug 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php生成随机数的三种方法
2014/09/10 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
javascript call和apply方法
2008/11/24 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
vue自定义组件实现双向绑定
2021/01/13 Vue.js
python zip文件 压缩
2008/12/24 Python
python中while循环语句用法简单实例
2015/05/07 Python
python实现数据分析与建模
2019/07/11 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python文件和文件夹复制函数
2020/02/07 Python
Python-openCV开运算实例
2020/07/05 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL