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+MySql编写聊天室
Oct 09 PHP
PHP读取MySQL数据代码
Jun 05 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
php输出文字乱码的解决方法
Oct 04 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 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 基础教程(一)
2006/10/09 PHP
什么是MVC,好东西啊
2007/05/03 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
解析php中curl_multi的应用
2013/07/17 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP递归创建多级目录
2015/11/05 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Python 支持向量机分类器的实现
2020/01/15 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
Python可以用来做什么
2020/11/23 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
优秀中职教师事迹材料
2014/08/26 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
tomcat下部署jenkins的方法
2022/05/06 Servers