PHP的异常处理类Exception的使用及说明


Posted in PHP onJune 13, 2012

1、首先php5提供了基本的异常处理类,可直接使用

<?php 
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(); // 可输出的字符串 
} 
?>

简单的使用如下:(通过异常,抛出错误信息)
try { 
$error = 'my error!'; 
throw new Exception($error) 
} catch (Exception $e) { 
echo $e->getMessage(); 
}

2、我们可以扩展此类,方便我们的使用
class MyException extends Exception 
{ 
// 重定义构造器使 message 变为必须被指定的属性 
public function __construct($message, $code = 0) { 
// 自定义的代码 
// 确保所有变量都被正确赋值 
parent::__construct($message, $code); 
} 
// 自定义字符串输出的样式 
public function __toString() { 
return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; 
} 
public function customFunction() { 
echo "A Custom function for this type of exception\n"; 
} 
}

异常处理的基本思想是代码在try代码被调用执行。如果try码块出现错误,我们可以执行一个抛出异常的处理。某些编程语言,如java,,在特定情况下将自动抛出异常。在php中,异常必须手动抛出。可以使用如下方式抛出一个异常:

Throw new Exception(‘message',code);

Throw 关键字将触发异常处理机制,它是一个语言结构,而不是一个函数,但是必须给它传递一个值。它要求一个接受对象。在最简单的情况下,可以实例化一个内置的Exception类。

最后,在try代码之后,必须至少给出一个catch代码块。可以将多个catch代码块与一个try代码块进行关联。如果每个catch代码块可以捕获一个不同类型的异常,可以使用多个catch代码块是有意义的。例如,如果想捕获Exception类的异常,代码如下

Catch(Exception $e) 
{ 
//handing exception 
} 
Catch代码捕获的对象就是导致异常并传递给throw语句的对象(被throw 语句抛出)。使用Exception 类的实例,是不错的选择。 
Exception类提供了如下的内置方法: 
Getcode()
 —返回传递给构造函数的代码。 

GetMessage() —返回传递给构造函数的消息。 

getFile()
   —返回产生异常代码的文件的路径 

getLine()

—返回产生异常的代码所在的行。

注意:
当捕获到一个异常后,try()块里面的后续代码将不会继续执行,而是会尝试查找匹配的“catch”代码块
当抛出一个异常后,如果不进行catch处理,则会报“Uncaught exception 'Exception'”错误
<?php 
function test($val){ 
if ($val>100){ 
throw new Exception("提示信息:您输入的值过大"); 
} 
} 
test(111); 
?>

3.当一个异常抛出后,catch语句块可以进行处理也可以不处理
以下是我用户注册功能的部分代码
try{ 
//check forms filled in 
if(!filled_out($_POST)){ 
throw new Exception('你还没有填写表单,请回去填写'); 
} 
//check email address not valid 
if(!check_email($email)){ 
throw new Exception('邮件的格式不正确'); 
} 
//检查密度的长度是否大于6 
if(strlen($passwd<6)){ 
throw new Exception('密度的长度应该大于6'); 
} 
//检查两次密码是否相等 
if($passwd!=$passwd1){ 
throw new Exception('两次密码不一样,请重新输入'); 
} 
//检查用户名的长度是否正确 
if(strlen($username)>16){ 
throw new Exception('用户名的长度不符,请重新输入'); 
} 
} catch(Exception $e){ 
echo $e->getMessage(); //输出异常信息。 
}
PHP 相关文章推荐
php 阴历-农历-转换类代码
Jan 16 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
PHP抽象类 介绍
Jun 13 #PHP
MySQL 日期时间函数常用总结
Jun 12 #PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 #PHP
php数字游戏 计算24算法
Jun 10 #PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 #PHP
逆序二维数组插入一元素的php代码
Jun 08 #PHP
PHP 年龄计算函数(精确到天)
Jun 07 #PHP
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
Django 实现下载文件功能的示例
2018/03/06 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Django后台admin的使用详解
2019/07/08 Python
解决Django中多条件查询的问题
2019/07/18 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
从python读取sql的实例方法
2020/07/21 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
护理学专业求职信
2014/06/29 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
秋菊打官司观后感
2015/06/03 职场文书
离婚财产分割协议书
2015/08/11 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS