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的session功能评述(三)
Oct 09 PHP
php 文件上传系统手记
Oct 26 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php生成xml时添加CDATA标签的方法
Oct 17 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
浅析PHP7的多进程及实例源码
Apr 14 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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
动易数据转成dedecms的php程序
2007/04/07 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
机器学习python实战之决策树
2017/11/01 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
使用Python函数进行模块化的实现
2019/11/15 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
工作鉴定评语
2014/05/04 职场文书
法学求职信
2014/06/22 职场文书
锦旗标语大全
2014/06/23 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
党员转正大会主持词
2015/07/02 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书