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
php程序之die调试法 快速解决错误
Sep 17 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
Smarty保留变量用法分析
May 23 PHP
基于php判断客户端类型
Oct 14 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
php往mysql中批量插入数据实例教程
Dec 12 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颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
javascript 常用方法总结
2009/06/03 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
django2 快速安装指南分享
2018/01/05 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
python里 super类的工作原理详解
2019/06/19 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
美术教师自我鉴定
2014/02/12 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
MySQL 字符集 character
2022/05/04 MySQL