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 相关文章推荐
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
?生?D片??C字串
Dec 06 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php一个找二层目录的小东东
Aug 02 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php 禁止页面缓存输出
2009/01/07 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
PHP数组操作类实例
2015/07/11 PHP
php for 循环使用的简单实例
2016/06/02 PHP
PHP多进程简单实例小结
2019/11/09 PHP
JQuery1.6 使用方法三
2011/11/23 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
档案接收函范文
2014/01/10 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
授权委托书公证
2014/09/14 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
中班下学期个人总结
2015/02/12 职场文书
遗失说明具结保证书
2015/02/26 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL