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&amp;java(三)
Oct 09 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
用php解析html的实现代码
Aug 08 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 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
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
对联广告js flash激活
2006/10/19 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
js数组操作学习总结
2013/11/04 Javascript
jquery常用操作小结
2014/07/21 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
Python本地与全局命名空间用法实例
2015/06/16 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python中必要的名词解释
2019/11/20 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
银行给客户的感谢信
2015/01/23 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
python实现剪贴板的操作
2021/07/01 Python
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
Linux安装Docker详细教程
2022/07/07 Servers