扩展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

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

}

?>

上面这段代码只为说明内置异常处理函数类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

<?php

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

class MyException extends Exception{

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

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

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

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

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

}

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

public function __toString(){

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

}

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

public function customFunction(){

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

}

}

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学习教程 发表

时间: 2024-10-10 14:47:45

扩展PHP内置的异常处理类的相关文章

扩展Django内置的auth模块代码示例

一,创建自定义User模型类.继承AbstractUser 方法1 新建一个表,表里面有手机号,邮箱,地址,一对一与User表进行关联 方法2 新定义一个类,继承类AbstractUser ( auth模块的User类也是继承此AbstractUser 类的) 说明:python 语法上,也是可以直接继承User类的 以下代码,我们扩展了两个字段,phone和addr 注意:settings.py中一定要指不使用内置的User表,而是使用新的UserInfo表 AUTH_USER_MODEL='

Python的内置方法和类的继承举例

1.类的内置方法 Python内部类:所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界.例子:汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类,更好的描述汽车类,因为底盘轮胎是汽车的一部分.内部类实例化方法: 方法1:直接使用外部类调用内部类方法2:先对外部类进行实例化,然后再实例化内部类out_name = outclass_name()in_name = out_name.inclass_name()in_name.method() #!/us

16.Python内置函数?面向对象-类-对象

一. 面向对象初识 1.1.回顾面向过程编程vs函数式编程 # 面向过程编程 测量对象的元素个个数. s1 = 'fjdsklafsjda' count = 0 for i in s1: count += 1 l1 = [1,2,3,4] count = 0 for i in l1: count += 1 def func(s): count = 0 for i in s: count += 1 return count func('fdsafdsa') func([1,2,3,4]) 通过对比

Django扩展内置User类

内置User类 使用内置User可以方便实现登录验证,利用Admin管理界面还可以方便添加.删除.修改用户. 一个内置的User类定义了以下字段: username: 用户名 password: 密码 first_name: 姓名first last_name: 姓名last email: 邮箱 groups: Group类多对多的关系对象管理器 user_permissions: Permission类多对多的关系对象管理器 is_staff: 是否工作人员 is_active: 是否激活 i

python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法

一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) #结果为True 2.issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar, Foo)) #结果为True

Python——异常(内置异常以及应用场景)

""" 什么是异常: 1.异常指出了我们的程序有错误 2.有些异常也会在一些合法的情况下发生,比如用户名密码错误,银行卡号不存在 3.内置异常的名字都是以Error结尾:ZeroDivisionError,IndexError,SyntaxError 4.所有异常类都是继承于Exception,(扩展BaseException) 5.当一个异常发生的时候,会立即停止程序的执行,除非正确的处理这个异常 6.异常是一个对象,并且可以继承(通过继承Exception类来实现自己的异

Django—内置用户权限管理

内置用户权限管理 对于注册.登录.验证等功能我们可以自己编写用户管理应用,但Django也有一个内置的用户权限管理系统.也是很强大的. 在哪可以看到? 关于用户的信息都存放在这个表中. auth模块 from django.contrib import auth 其中有几个常用的方法: authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username .password两个关键字参数. 如果认证成功(用户名和密码正确有效),便会返回一个 User 实例对象

.Net——使用.net内置处理程序处理自定义节点Demo

在.net中,因为对不同的节点,都对应着类去对它进行处理,.net里面为了方便,已经内置了一些类供我们使用,使我们在读取配置文件时,不必自己去定义类去处理自己定义的自定义节点. 下面我们写了这样一个配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <!--使用IgnoreSection处理自定义节点--> <

.Net——使用.net内置处理程序处理自己定义节点Demo

在.net中.由于对不同的节点,都相应着类去对它进行处理,.net里面为了方便.已经内置了一些类供我们使用.使我们在读取配置文件时.不必自己去定义类去处理自己定义的自己定义节点. 以下我们写了这样一个配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <!--使用IgnoreSection处理自己定义节点--> &