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面向对象编程快速入门
Dec 14 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
微信支付开发维权通知实例
Jul 12 PHP
php实现文件预览功能
May 23 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 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
2006/12/14 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
jQuery实现frame之间互通的方法
2017/06/26 jQuery
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python 闭包的使用方法
2017/09/07 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
采购文员岗位职责
2013/11/20 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
学校运动会加油词
2015/07/18 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL