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 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php递归创建目录的方法
Feb 02 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
解决laravel5.4下的group by报错的问题
Oct 16 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函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
理解javascript中的闭包
2017/01/11 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
Python random模块用法解析及简单示例
2017/12/18 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
软件售后服务承诺书
2014/05/21 职场文书
小学开学标语
2014/07/01 职场文书
加强作风建设心得体会
2014/10/22 职场文书
财务检查整改报告
2014/11/06 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
生日寿星公答谢词
2015/09/29 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
Python字符串的转义字符
2022/04/07 Python