标签:
一、异常处理
异常(Exception):是一个程序在执行过程中出现的一个例外或是事件,它中断了正常指令的执行,跳转到其他程序模块继续执行,严重会导致丢失数据或者程序崩溃。
异常处理:用于在指定的错误发生时改变脚本的正常流程。是PHP5中的一个新的重要特性。异常处理是一种可扩展、易维护的错误处理统一机制,并提供了一种新的面向对象的错误处理方式。
当异常被触发时,通常会发生:
1.当前代码状态被保存
2.代码执行被切换到预定义的异常处理器函数
3.根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
异常处理格式:
try{
使用try去包含可能会发生异常的代码.
一旦出现异常try进行捕获异常,交给catch处理。
抛出异常语句:throw 异常对象。
}catch(异常对象参数){
在这里做异常处理。
}[catch(...){
.. .. ..
}]
异常的规则:
需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
使用多个 catch 代码块可以捕获不同种类的异常。
可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
简而言之:如果抛出了异常,就必须捕获它。
1 <?php 2 //模拟一个异常抛出和处理 3 try { 4 $error = ‘Always throw this error‘; 5 throw new Exception($error); 6 //创建一个异常对象,通过throw语句抛出 7 echo ‘Never executed‘; 8 //从这里开始,try代码块内的代码将不会再被执行 9 } catch (Exception $e) { 10 echo ‘Caught exception: ‘.$e->getMessage()."<br>"; 11 //输出捕获的异常消息 12 } 13 echo ‘Hello World‘; //程序没有崩溃继续向下执行 14 ?>
二、自定义异常处理类
1.系统异常处理:PHP中提供的内置异常处理类Exception是所有异常类的基类,所有系统内置异常处理类或者自定义异常处理类都必须继承这个类。
内置异常处理类Exception的结构:
1 <?php 2 class Exception{ 3 protected $message = ‘Unknown exception‘; // 异常信息 4 protected $code = 0; // 用户自定义异常代码 5 protected $file; // 发生异常的文件名 6 protected $line; // 发生异常的代码行号 7 8 //构造方法 9 function __construct($message = null, $code = 0); 10 11 final function getMessage(); // 返回异常信息 12 final function getCode(); // 返回异常代码 13 final function getFile(); // 返回发生异常的文件名 14 final function getLine(); // 返回发生异常的代码行号 15 final function getTrace(); // backtrace() 数组 16 final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 17 18 /* 可重载的方法 */ 19 function __toString(); // 可输出的字符串 20 } 21 ?>
2.自定义异常处理类
1 <?php 2 /* 自定义的一个异常处理类,但必须是扩展内异常处理类的子类 */ 3 class MyException extends Exception{ 4 //重定义构造器使第一个参数 message 变为必须被指定的属性 5 public function __construct($message, $code=0){ 6 //可以在这里定义一些自己的代码 7 //建议同时调用 parent::construct()来检查所有的变量是否已被赋值 8 parent::__construct($message, $code); 9 } 10 public function __toString() { 11 //重写父类方法,自定义字符串输出的样式 12 return __CLASS__.":[".$this->code."]:".$this->message."<br>"; 13 } 14 public function customFunction() { 15 //为这个异常自定义一个处理方法 16 echo "按自定义的方法处理出现的这个类型的异常<br>"; 17 } 18 } 19 ?>
1 <?php 2 try { //使用自定义的异常类捕获一个异常,并处理异常 3 $error = ‘允许抛出这个错误‘; 4 throw new MyException($error); 5 //创建一个自定义的异常类对象,通过throw语句抛出 6 echo ‘Never executed‘; 7 //从这里开始,try代码块内的代码将不会再被执行 8 } catch (MyException $e) { //捕获自定义的异常对象 9 echo ‘捕获异常: ‘.$e; //输出捕获的异常消息 10 $e->customFunction(); //通过自定义的异常对象中的方法处理异常 11 } 12 echo ‘你好呀‘; //程序没有崩溃继续向下执行 13 ?>
三、捕获多个异常
在try代码之后,必须至少给出一个catch代码块,也可以将多个catch代码块与一个try代码块关联使用。那么使用多个catch就可以捕获不同的类所产生的异常。注意顺序。Exception必须在最后一个catch中,不然其他catch就没有意义。
四、PHP中类与对象的相关函数
============================
Classes/Object 函数
============================
参考手册中--与对象和类有关的扩展函数
1. class_alias — 为类创建一个别名
格式:bool class_alias ([ string $original [, string $alias ]] )
示例:
class foo { }
class_alias(‘foo‘, ‘bar‘);
$a = new foo;
$b = new bar;
// the objects are the same
var_dump($a == $b, $a === $b); //bool(true)
var_dump($a instanceof $b); //bool(false)
// the classes are the same
var_dump($a instanceof foo); //bool(true)
var_dump($a instanceof bar); //bool(true)
var_dump($b instanceof foo); //bool(true)
var_dump($b instanceof bar); //bool(true)
*2. class_exists — 检查类是否已定义
格式: bool class_exists ( string $class_name [, bool $autoload ] )
--如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。
默认将会尝试调用 __autoload,如果不想让 class_exists() 调用 __autoload,
可以将 autoload 参数设为 FALSE。
3. get_called_class — the "Late Static Binding" class name
(PHP 5 >= 5.3.0) 获取调用者的类名
*4. get_class_methods — 返回由类的方法名组成的数组
格式:array get_class_methods ( mixed $class_name )
返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL。
从 PHP 4.0.6 开始,可以指定对象本身来代替 class_name
5. get_class_vars — 返回由类的默认公有属性组成的数组
格式: array get_class_vars ( string $class_name )
返回由类的默认公有属性组成的关联数组,此数组的元素以 varname => value 的形式存在。
*6. get_class — 返回对象的类名
格式: string get_class ([ object $obj ] )
返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。
7. get_declared_classes — 返回由已定义类的名字所组成的数组
格式:array get_declared_classes ( void )
返回由当前脚本中已定义类的名字组成的数组。
8. get_declared_interfaces — 返回一个数组包含所有已声明的接口
格式:array get_declared_interfaces ( void )
本函数返回一个数组,其内容是当前脚本中所有已声明的接口的名字。
9. get_object_vars — 返回由对象属性组成的关联数组
格式:array get_object_vars ( object $obj )
返回由 obj 指定的对象中定义的属性组成的关联数组。
10. get_parent_class — 返回对象或类的父类名
格式:string get_parent_class ([ mixed $obj ] )
如果 obj 是对象,则返回对象实例 obj 所属类的父类名。
11. interface_exists — 检查接口是否已被定义
格式:bool interface_exists ( string $interface_name [, bool $autoload ] )
本函数在由 interface_name 给出的接口已定义时返回 TRUE,否则返回 FALSE。
*12. is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
我们可以使用运算符: instanceof代替上面的is_a操作
标签:
原文地址:http://www.cnblogs.com/yexiang520/p/5668592.html