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新手上路(十三)
Oct 09 PHP
Cannot modify header information错误解决方法
Oct 08 PHP
php中计算时间差的几种方法
Dec 31 PHP
paypal即时到账php实现代码
Nov 28 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php修改指定文件后缀的方法
Sep 11 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
详细解读php的命名空间(一)
Feb 21 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 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绘制圆形的方法
2015/01/24 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
form自动提交实例讲解
2017/07/10 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
js CSS操作方法集合
2008/10/31 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
详解vue 组件
2020/06/11 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python实现一个简单的验证码程序
2017/11/03 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
大学生第一学年自我鉴定
2014/09/12 职场文书
导游词开场白
2015/01/31 职场文书
地道战观后感400字
2015/06/04 职场文书
居住证明范文
2015/06/17 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android