php 内置异常 file,扩展PHP内置的异常处理类,php内置异常处理_PHP教程

扩展PHP内置的异常处理类,php内置异常处理

在try代码块中,需要使用throw语句抛出一个异常对象,才能跳到转到catch代码块中执行,并在catch代码块中捕获并使用这个异常类的对象。虽然在PHP中提供的内置异常处理类Exception,已经具有非常不错的特性,但在某些情况下,可能还要扩展这个类来得到更多的功能。所以用户可以用自定义的异常处理类来扩展PHP内置的异常处理类。以下代码说明了在内置的异常处理类中,哪些属性和方法在子类中是可访问和可继承的:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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(){}

}

?>

上面这段代码只为说明内置异常处理函数类Exception的结构,它并不是一段有实际意义的可用代码。如果使用自定义的类作为异常处理类,则必须是扩展内置异常处理类Exception的子类,非Exception类的子类是不能作为异常处理类使用的。如果在扩展内置异常处理类Excepiton时重新定义构造函数,建议同时调用parent::construct()来检查所有的变量是否已被赋值。当对象要输出字符串的时候,可以重载__toString()并自定义输出的样式。可以在自定义的子类中,直接使用内置异常处理Exception类中的所有成员属性,但不能重新改写从该父类中继承过来的成员方法,因为该类的大多数公有方法都是final的。

创建自定义的异常处理程序非常简单,和传统类的声明方式相同,但该类必须是内置异常处理类Exception的一个扩展。当PHP中发生异常时,可调用自定义异常类中的方法进行处理。创建一个自定义的MyException类,继承了内置异常处理类Exception中的所有属性,并向其添加了自定义的方法。代码及应用如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

//滴定仪一个异常处理类,但必须是扩展内异常处理类的子类

class MyExceptionextends Exception{

//重定义构造器使第一个参数message变为必须被指定属性

public function __construct($message,$code=0){

//在这里定义一些自己的代码

//建议同时调用parent::construct()来检查所有的变量是否已被赋值

parent::__construct($message,$code);

}

//重写父类方法,自定义字符串输出的样式

public function __toString(){

return __CLASS__.":[".$this->code."]:".$this->message."

";

}

//为这个异常自定义一个处理方法

public function customFunction(){

echo "按自定义的方法处理出现的这个类型的异常

";

}

}

try{

$error='允许抛出这个错误';

throw new MyException($error);//创建一个自定义异常的处理对象,通过throw语句抛出

echo 'Never executed';//从这里开始,try代码块内的代码将不会再被执行

}catch(MyException$e){//捕获自定义的异常对象

echo '捕获异常:'.$e;//输出捕获的异常消息

$e->customFunction();//通过自定义的异常对象中的方法处理异常

}

echo '你好呀';//程序没有崩溃继续向下执行

?>

在自定义的MyExcepition类中,使用父类中的构造方法检查所有的变量是否已被赋值。而且重载了父类中的__toString()方法,输出自己定制捕获的异常处理类,在使用上没有多大区别,只不过在自定义的异常处理类中,可以调用为具体的异常专门编写的处理方法。

>> 本文固定链接: http://php.ncong.com/php_course/wrong/yichangchulilei.html

>> 转载请注明: 恩聪php 2014年08月06日 于 恩聪PHP学习教程 发表

PHP异常处理的一些问题

这个问题我前几天也跟同事讨论过。我这么来解释把

比如你调用了try catch ,数组超标,那程序怎么知道是数组超标呢,那肯定是数组类报出来的。

而数组类里面,肯定是throw出来,你才能catch到,得到message,数组超标,但是如果数组类里面,直接catch了,就没有异常了!这样你调用数组即使超标了,你自己的catch是catch不到,因为没人抛出异常

别人的回答太官话了,求采纳我的

PHP自定义异常处理器的几种使用方法

我们介绍的这个PHP自定义异常处理器为PHP内置的exception_uncaught_handler()函数。该函数可用于设置用户自定义的异常处理函数,处理trycatch块未捕获的异常。

以下4段代码为我在waylife项目中的简单应用(非生产环境),不健壮也不美化,但该SNS项目早已经夭折。

1、异常类的层级关系:

classNotFoundExceptionextendsException{}

classInputExceptionextendsException{}

classDBExceptionextendsException{}

2、配置未捕捉异常的处理器:

functionexception_uncaught_handler(Exception$e){

header('Content-type:text/html;charset=utf-8');if($einstanceofNotFoundException)exit($e-

getMessage());

elseif($einstanceofDBException)exit($e-

getMessage());elseexit($e-

getMessage());}set_exception_handler('exception_uncaught_handler');

3、在数据库连接代码源码天空

,手动抛出DBException异常但未使用trycatch进行捕获处理,该异常将被PHP自定义异常处理器exception_uncaught_handler()函数处理:$this-resConn=mysql_connect

($CONFIGS['db_host'],$CONFIGS['db_user'],$CONFIGS['db_pwd']);if(false==is_resource($this-resConn))thrownewDBException('数据库连接失败。'.mysql_error($this-resConn));4、业务逻辑一瞥:

if(0!=strcmp($curAlbum-

interest_id,$it))

thrownewNotFoundException('很抱歉,你所访问的相册不存在');

http://www.bkjia.com/PHPjc/870653.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/870653.htmlTechArticle扩展PHP内置的异常处理类,php内置异常处理 在try代码块中,需要使用throw语句抛出一个异常对象,才能跳到转到catch代码块中执行,并在c...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值