PEAR基础类是更多PEAR类的规定标准功能. 通常你不能直接实例化PEAR基类,你必须使用子类这样作.
它的关键作用是:
request-shutdown object "destructors" 需求关闭对象"析构器"
错误处理
如果你继承PEAR一个类,名字ClassName,你可以定义一个方法叫做 _ClassName
(这个类名预先就计划有个下划线) ,当请求结束它被调用.
这在一定意义上不是destructor 你能"删除"一个物体并且让人叫destructor, 但是在感觉里PHP在物体方面给你回叫 当PHP被做执行时。
在一定意义上说,你能删除一个对象并且能析构一个对象都不叫做析构.
当php执行的时候,php会给你的对象一个回应. 下面这个例子
重要的! | |
如果你只用"= new",当构造函数被调用时候,PEAR的关闭列表中的注册对象会成为对象的一个副本. 当它被要求关闭的就成了这个副本的析构器, |
PEAR的基础类要处理周围复杂的错误不光是正确/错误的值或者数字代码. 一个PEAR错误是任一一个实例化的类PEAR_Error中的一个对象PEAR_Error, 或者继承类 PEAR_Error.
PEAR的错误设计标准不算是强迫给用户一个特殊种类的输出, 也有可能处理错误的时候没有任何的输出. 当你输出格式不同于html时候(比如WML或者XML格式),这样的处理让可能的错误处理变先的柔和,
当错误对象被创建时候,它能被设置参与一些事情.比如打印一个错误消息,打印消息并退出,提高调出PHP的 trigger_error() 函数, 调用一个返回值,或者什么都不作. 这是有代表性的专门的PEAR_Error的构造器, 所有的参数都是可选的,你可以设置每个基于PEAR类的对象发生默认的错误. 请看 PEAR error 例子 如何使用 PEAR_Error 全部的资料.
这个例子使用了PEAR的"poor man's kinda emulated destructors" " 被仿效的可怜穷人析构器" 来实现一个简单的类来掌握这些.让你添加数据到对象. 并且再请求的最后数据回馈到文件.
Example 19-1. PEAR: emulated destructors
|
关注: PEAR 析构器 使用 PHP的关闭返回值 (register_shutdown_function()), 在PHP < 4.1,当你的php在网站服务器上运行的是欧,你不能从中输出任何东西. 除了当php运行预命令行模式,任何构造函数的打印都会丢失. 在php4.1或者更高版本中,可以在析构函数中出现输出了.
请看 警告 如果想使用析构函数,如何实例化一个对象
下一个例子举例说明了不同放发使用PEAR的错误处理机制.
Example 19-2. PEAR 错误例子 (1)
|
这个例子展示了fsockopen()的包装(wrapper) ,他PEAR错误对象fsockopen(如果任意)返回的传送错误代码和信息. 注意, PEAR::isError() 常常用来检查一个值是否示PEAR的错误.
这个例子中PEAR_Error的操作模式简单的返回了错误对象并简单的与其它的用户(程序)分离. 这是默认的错误模式
下一个例子,我们展示了如何使用默认的错误模式:
Example 19-3. PEAR error 例子 (2)
|
这里,我们设置默认的错误模式 PEAR_ERROR_DIE, 我们没有raiseError调用(成为第三参数)中指定任何错误模式 ,如果fsockopen失败,raiseError使用默认错误默认并退出.
PEAR类为全局缺省值注册了一些全局变量,并且,析构函数使用一个对象列表. 所有和PEAR的类关联的全局变量都有一个 _PEAR_ 前缀.
如果再一个对象中没有设置默认错误模式,这个模式就被使用了. 必然有一个 PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE or PEAR_ERROR_CALLBACK.
不要直接给这个变量赋值,调用 PEAR::setErrorHandling() 使用一个静态方法,像这样:
如果错误模式是 PEAR_ERROR_TRIGGER, 这是错误等级( E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR的一个).
不要直接给参数赋值, PEAR::setErrorHandling() 使用一个静态方法,像这样:
当一个错误出现并且错误模式是 PEAR_ERROR_CALLBACK而且没有操作参数, 这个变量的值就是返回类型的值.这个意思就是,你能够临时切换错误模式,不用再次指定的返回函数而得到返回值模式的返回值. 一个string字符串值代表一个函数,一个拥有(0索引的对象和1索引字符串代表的一个方法)一个对象两维数组.
再次,不要直接设置变量,调用 PEAR::setErrorHandling() 设置一个静态方法,这样:
下面例子,如何不使用返回函数切换返回和前进: