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 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php与paypal整合方法
Nov 28 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP常用的排序和查找算法
Aug 06 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
php解决安全问题的方法实例
Sep 19 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 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写的简易聊天室代码
2011/06/04 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
js转义字符介绍
2013/11/05 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
详解javascript replace高级用法
2019/02/17 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
es5 类与es6中class的区别小结
2020/11/09 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
python中几种自动微分库解析
2019/08/29 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python绘制雷达图实例讲解
2021/01/03 Python
java字符串格式化输出实例讲解
2021/01/06 Python
行政人事岗位职责
2014/03/17 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
安全责任书范文
2014/08/25 职场文书
2014年司法所工作总结
2014/11/22 职场文书
环卫个人总结
2015/03/03 职场文书
如何写通讯稿
2015/07/22 职场文书
优秀大学生申请书
2019/06/24 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL