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 相关文章推荐
文件上传程序的全部源码
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
ThinkPHP分页实例
Oct 15 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
php 实现进制相互转换
Apr 07 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 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和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python callable()函数用法实例分析
2018/03/17 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
如何通过python计算圆周率PI
2020/11/11 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
项目合作意向书范本
2014/04/01 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
研讨会通知
2015/04/27 职场文书
幼儿园辞职信
2015/05/13 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers