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 Date/Time 类型
Mar 26 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
PHP的拦截器实例分析
Nov 03 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
PHP中返回引用类型的方法
Apr 03 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
php curl批处理实现可控并发异步操作示例
May 09 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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循环跳出的问题
2013/07/01 PHP
Laravel5中contracts详解
2015/03/02 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python实现八大排序算法
2016/08/13 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
keras之权重初始化方式
2020/05/21 Python
python 操作excel表格的方法
2020/12/05 Python
linux系统都有哪些运行级别
2012/04/15 面试题
学校安全教育制度
2014/01/31 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
委托公证书范本
2014/04/03 职场文书
初三新学期计划书
2014/05/03 职场文书
秦兵马俑导游词
2015/02/02 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
python获取带有返回值的多线程
2022/05/02 Python