【转】PHP的异常处理类Exception的使用及说明
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'”错误
<?phpfunction test($val){if ($val>100){throw new Exception("提示信息:您输入的值过大");}}test(111); ?>
3.当一个异常抛出后,catch语句块可以进行处理也可以不处理
以下是我用户注册功能的部分代码
try{//check forms filled inif(!filled_out($_POST)){throw new Exception('你还没有填写表单,请回去填写');}//check email address not validif(!check_email($email)){throw new Exception('邮件的格式不正确');}//检查密度的长度是否大于6if(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(); //输出异常信息。}
转载自:http://www.cnblogs.com/zhmt/archive/2012/03/10/2389347.html 和 http://www.cnblogs.com/yangsen/archive/2012/01/30/2331595.html
【转】PHP的异常处理类Exception的使用及说明相关推荐
- C++异常处理类与自定义异常处理类
转自:http://blog.csdn.net/makenothing/article/details/43273137 例1:自定义一个继承自excepton的异常类myException C++标 ...
- PHP异常处理类(文件上传提示)
知识点: 大部分时候我们的代码总有各种各样的bug,新手程序员(比如我)最经常的工作就是不停的报错和echo变量,一个好的异常处理类可以帮我们更快+更容易理解报错代码的问题,同时,异常处理还可以避免一 ...
- php简单异常,PHP实现的简单异常处理类示例
具体如下: header('content-type:text/html;charset=UTF-8'); // 创建email异常处理类 class emailException extends e ...
- 如何写一个完善的c++异常处理类
我们的异常处理类的features 如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下. 一个相对完善的异常处理类(以及附加的一些东西)应该能够 ...
- php面向对象异常处理,PHP面向对象编程——自定义PHP异常处理类
/* ?* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程--自定义PHP异常处理类 ?* 这所以用自定义的异常类,主要是区分异常来自程序的哪一部分,比如是来自MYSQL的还 ...
- or1200处理器的异常处理类指令介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...
- springboot定义全局异常处理类GlobalExceptionHandler
全局异常处理:GlobalExceptionHandler 定义全局异常处理类 以下为扩展部分 返回参数封装 引用示例 定义全局异常处理类 注意:如果需要返回页面,则要删掉@ResponseBody注 ...
- PHP 异常类 Exception 高洛峰 细说PHP
/** 1.自定义的异常类,必须是系统类Exception的子类* 如果继承Exception类,重写了构造方法,一定要调用一下父类的构造方法.*/class MyException extends ...
- springboot统一异常处理类及注解参数为数组的写法
springboot统一异常处理类及注解参数为数组的写法 参考文章: (1)springboot统一异常处理类及注解参数为数组的写法 (2)https://www.cnblogs.com/zhucww ...
最新文章
- Java实用教程笔记 类与对象
- 开源任务调度平台elastic-job-lite源码解析
- I春秋——web Write up(三)
- Linux学习之系统编程篇:MMU(Memory Manager Unit 内存管理单元)
- HP-UX的终端TERM要设置成什么,才能输入中文呢?
- Google Earth KML格式成为开放式国际标准
- java中userservice是什么,【图片】求助大神~~我在Reaml中注入userService对象启动tomcat就报错【java吧】_百度贴吧...
- Android中的界面组成
- [转] 电子技术*笔记4【2013-03】
- 简单java数组程序_最简单易懂的java数组排序方法整理
- SEO实战密码:60天网站流量提高20倍(第2版)
- 【odoo】odoo使用阿里邮箱配置邮件系统
- [WinError 193] %1 不是有效的 Win32 应用程序问题解决
- 乌镇现场 | 倪光南:人工智能应该更好的为人类的服务
- B150主板Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法
- 通过PC控制、操作andriod 手机-androidscreencast
- 简单典型二阶系统_MIT—微分方程与线性代数笔记2.1 二阶常微分方程
- shell中的if语句
- 编写一个函数int isPrime(int x),当x是素数时,返回1,否则返回0; 在main函数中,输入一个正整数,如果是素数输出Y,否则输出N。
- 今年9月开学!香港科技大学(广州)人工智能专业已开始招生!
热门文章
- mac下面安装mysql
- spark streaming kafka Couldn't find leader
- Win2008 R2 IIS7.5+PHP5(FastCGI)+MySQL5环境搭建教程
- 语句include和require的区别是什么?
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛B: Out-out-control cars
- PHP排序算法的复习和总结
- Android模拟器(包括Genymotion)访问本机服务器
- unix 网络编程卷2 第43页 管道:open竟然会阻塞?
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.6 一维粘性热传导流体动力学方程组...
- [Umbraco] 创建第一个页面