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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
PHP学习资料汇总与网址
Mar 16 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
php和vue配合使用技巧和方法
May 09 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 PHP
PHP 裁剪图片
Mar 09 PHP
PHP解决高并发问题
Apr 01 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
优化PHP程序的方法小结
2012/02/23 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
php实现图片缩放功能类
2013/12/18 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python的标准模块包json详解
2017/03/13 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
市场营销战略计划书
2014/05/06 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
golang内置函数len的小技巧
2021/07/25 Golang