PHP5的异常处理机制[1]--本文索引
作者:Haohappy 来源:PHPEye.com 2007-01-28
作者: Matt Zandstra
翻译: Haohappy 04-8-20
Haohappy@msn.com
本文面向的读者
简介
在PHP5之前的错误处理
-使用die()或trigger_error()
-返回错误标记
-使用PEAR处理错误
PHP5的异常机制
-使用throw关键字
-try-catch语句
-处理多个错误
-自定义异常类型
-异常的传递
-更多异常的相关信息
总结
关于作者
本文面向的读者
本文面向希望了解PHP5异常处理机制的程序员。你需要具有一定面向对象编程和PHP基础。
简介
本文集中讨论各种错误处理,在这里你将可以看到PHP4,PHP5中的多种错误处理方式。PHP5引入了“异常机制”――一个在对象体系中进行错误处理的新机制。就像你即将看到的,“异常”提供了不少比传统的错误处理机制先进的特性。
PHP5的异常处理机制[2]--PHP5之前的错误处理之die()
作者:Haohappy 来源:PHPEye.com 2007-01-28 最后更新:2007-02-06 16:43:14
PHP5之前的错误处理
在PHP5之前的程序错误处理多使用以下三种办法:
1.使用trigger_error()或die()函数来生成一个脚本层次的警告(warning)或致命错误(fatal error);
2.在类方法或函数中返回一个错误标记(如false),也可能设置一个之后可以检查的属性或全局变量(如$error),然后在适合的地方检验其值再决定是否继续执行程序(如if($error==1){});
3. 使用PEAR处理错误;
(一)使用die()或trigger_error()
你可以使用die()函数来结束程序运行。以下是一个简单的类,它尝试从一个目录中加载一个类文件。
index.php
PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()
作者:Haohappy 来源:PHPEye.com 2007-01-28
我们或许可以通过trigger_error()生成一个用户警告来代替,使程序更具有灵活性。
Index2.php
<?php
// PHP 4
require_once(
'cmd_php4/Command.php'
);
class
CommandManager
{
var
$cmdDir
=
"cmd_php4"
;
function
getCommandObject
(
$cmd
) {
$path
=
"{$this->cmdDir}/{$cmd}.php"
;
if (!
file_exists
(
$path
)) {
trigger_error
(
"Cannot find $path"
,
E_USER_ERROR
);
}
require_once
$path
;
if (!
class_exists
(
$cmd
)) {
trigger_error
(
"class $cmd does not exist"
,
E_USER_ERROR
);
}
$ret
= new
$cmd
();
if (!
is_a
(
$ret
,
'Command'
)) {
trigger_error
(
"$cmd is not a Command"
,
E_USER_ERROR
);
}
return
$ret
;
}
}
?>
PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)
作者:Haohappy 来源:PHPEye.com 2007-01-28
(二)返回错误标记
脚本层次的错误处理比较粗糙但很有用。尽管如此,我们有时需要更大的灵活性。我们可以使用返回错误标识的办法来告诉客户代码“错误发生了!”。这将程序是否继续,如何继续的责任交给客户代码来决定。
这里我们改进了前面的例子来返回一个脚本执行出错的标志(false是一个常用的不错的选择)。
index3.php
<?php
// PHP 4
require_once(
'cmd_php4/Command.php'
);
class
CommandManager
{
var
$cmdDir
=
"cmd_php4"
;
function
getCommandObject
(
$cmd
) {
$path
=
"{$this->cmdDir}/{$cmd}.php"
;
if (!
file_exists
(
$path
)) {
return
false
;
}
require_once
$path
;
if (!
class_exists
(
$cmd
)) {
return
false
;
}
$ret
= new
$cmd
();
if (!
is_a
(
$ret
,
'Command'
)) {
return
false
;
}
return
$ret
;
}
}
?>
这意味着你可以根据环境来处理多个错误,而不会在第一个错误发生时马上停止程序的执行。
<?php
// PHP 4
$mgr
= new
CommandManager
();
$cmd
=
$mgr
->
getCommandObject
(
'realcommand'
);
if (
is_bool
(
$cmd
)) {
die(
"error getting command\n"
);
} else {
$cmd
->
execute
();
}
?>
or just a logged error:
<?php
// PHP 4
$mgr
= new
CommandManager
();
$cmd
=
$mgr
->
getCommandObject
(
'realcommand'
);
if(
is_bool
(
$cmd
)) {
error_log
(
"error getting command\n"
,
0
);
}
else {
$cmd
->
execute
();
}
?>
使用像“false”这样的错误标志的好处是直观,但是明显给出的信息量不够,我们无法得知到底是在哪一个环节上错而导致返回false。你可以再设置一个error属性,这样在产生错误后输出出错信息。
index4.php
<?php
// PHP 4
require_once(
'cmd_php4/Command.php'
);
class
CommandManager
{
var
$cmdDir
=
"cmd_php4"
;
var
$error_str
=
""
;
function
setError
(
$method
,
$msg
) {
$this
->
error_str
=
get_class
(
$this
).
"::{$method}(): $msg"
;
}
function
error
() {
return
$this
->
error_str
;
}
function
getCommandObject
(
$cmd
) {
$path
=
"{$this->cmdDir}/{$cmd}.php"
;
if (!
file_exists
(
$path
)) {
$this
->
setError
(
__FUNCTION__
,
"Cannot find $path\n"
);
return
false
;
}
require_once
$path
;
if (!
class_exists
(
$cmd
)) {
$this
->
setError
(
__FUNCTION__
,
"class $cmd does not exist"
);
return
false
;
}
$ret
= new
$cmd
();
if (!
is_a
(
$ret
,
'Command'
)) {
$this
->
setError
(
__FUNCTION__
,
"$cmd is not a Command"
);
return
false
;
}
return
$ret
;
}
}
?>
这个简单的机制可以让setError()
记
录下错误信息。其它代码可以通过error()来获得脚本错误的相关信息。你应该将这个功能抽取出来并放在一个最基本的类中,其它所用类都从这个类继承而来。这样可以统一处理错误,否则可能出现混乱。我就曾经见过有些程序在不同的类中使用getErrorStr()
、
getError()
和error()
等功能相同的函数。
然而,实际开发中要让程序中的所有类都从同一个类中继承而来是很困难的,除非同时使用接口(interface)否则无法实现一些子类自身特有的功能,但那已经是PHP5的内容。就像我们将提到的,PHP5中提供了更好的解决方案。
PHP5的异常处理机制[5]--PHP5之前的错误处理--使用PEAR处理错误
作者:Haohappy 来源:PHPEye.com 2007-01-28
(三)使用PEAR处理错误
你也可以使用PEAR来处理错误。当发生错误,将返回一个 Pear_Error
对象。后面的代码通过一个静态方法
PEAR::isError()
来检验这个对象。如果错误确实发生了,那么返回的
Pear_Error
对象将提供你需要的所有相关信息:
PEAR::getMessage()
|
- the error message 出错信息
|
PEAR::getType()
|
- the Pear_Error subtype 错误类型
|
PEAR::getUserInfo()
|
- additional information about the error or its context 附加信息
|
PEAR::getCode()
|
- the error code (if any) 出错代码
|
这里我们修改了getCommandObject()
方法,使之返回一个
Pear_Error
对象。
index_pear.php
// PHP 4
require_once(
"PEAR.php"
);
require_once(
'cmd_php4/Command.php'
);
class
CommandManager
{
????var
$cmdDir
=
"cmd_php4"
;
????function
getCommandObject
(
$cmd
) {
????????
$path
=
"{$this->cmdDir}/{$cmd}.php"
;
????????if (!
file_exists
(
$path
)) {
????????????return
PEAR
::
RaiseError
(
"Cannot find $path"
);
????????}
????????require_once
$path
;
????????if (!
class_exists
(
$cmd
)) {
????????????return
????????????
PEAR
::
RaiseError
(
"class $cmd does not exist"
color:
分享到:
相关推荐
通过对这些源码的分析,我们可以更深入地理解PHP异常处理机制的细节和实际操作。 总之,PHP的异常处理机制是程序健壮性的重要保障。通过合理地使用`try-catch-finally`结构和自定义异常类,我们可以有效地管理错误...
首先,我们来了解一下PHP中的错误处理机制。PHP提供了多种处理错误的方式,其中最常见的是: 1. **简单的die()或exit()语句**:当遇到错误时,通过这些函数立即终止脚本执行,并可输出错误信息。例如: ```php if...
本文将深入探讨PHP中的错误处理机制,包括基本概念、实现方法以及PHP5中引入的异常处理机制。 #### 二、PHP 错误处理基础 在PHP中,错误大致分为两类:编译错误(语法错误)和运行时错误。编译错误通常在脚本第一...
本教程将深入探讨PHP5的异常处理机制,帮助开发者更好地理解和掌握如何在遇到错误或异常情况时,优雅地控制程序流程。 PHP5之前的版本主要依赖于错误报告和返回值来处理程序运行中的问题,这种方式往往难以进行统一...
在PHP 5及以上版本中,引入了异常处理机制,为处理程序运行时的意外情况提供了一种更加结构化的方法。 一、错误处理 传统的错误处理通常依赖于`error_reporting`、`set_error_handler`等函数,它们会根据错误级别...
异常(Exception)是一种错误处理机制,用于在指定的错误发生时改变脚本的正常流程。 当异常被触发时,当前代码状态被保存,代码执行被切换到预定义的异常处理器函数(如果有) 根据情况,处理器也许会从保存的代码...
标题中的“tp5yi异常处理类资源”指的是ThinkPHP5.1版本的异常处理机制相关的学习资料或代码库。ThinkPHP5.1是基于PHP语言的一个轻量级、高性能的国产PHP框架,它提供了丰富的特性,包括优雅的MVC模式、强大的路由...
本章将深入探讨PHP5的异常处理机制及其相关概念。 5.1 PHP中的错误信息 在PHP中,错误分为不同类型,如致命错误、警告、通知等。错误信息通常会直接输出到页面,影响用户体验。为控制错误显示,可以在`php.ini`配置...
在PHP异常处理中,还存在一个重要的方法getPrevious(),它用于处理嵌套异常。当一个异常被抛出后,开发者可以调用这个方法来访问被嵌套的原始异常。这对于诊断和记录错误详情非常有用,因为它能够提供异常发生的完整...
在实际开发中,合理地利用PHP的异常处理机制,可以大大提升程序的健壮性和可维护性。处理异常时应当注意只处理那些确实能够处理的异常,避免捕获异常后无任何处理措施,这样会导致程序的逻辑错误无法被及时发现。...
>getMessage().'</b>is:<i>'....总结来说,PHP 的异常处理机制是一种强大的工具,可以帮助开发者更好地管理程序运行过程中的错误和异常情况。通过合理设计和使用异常处理逻辑,可以提高程序的健壮性和用户体验。
通过上述知识,我们了解到PHP的错误和异常处理机制,并且通过对给定文件中的示例代码的分析,学习了如何通过自定义错误和异常处理函数来增强程序的稳定性和用户体验。这些知识点对PHP开发者来说是基础且十分重要的,...
PHP异常处理机制为开发者提供了一种强大且灵活的方式来处理程序运行过程中可能出现的各种错误和异常情况。这种机制的主要优点在于能够将错误处理逻辑与正常业务逻辑分离,使得代码更加模块化、易于理解和维护。 ###...
本讲将深入探讨PHP中的异常处理机制,以及如何利用这个机制来提升代码的健壮性和可维护性。 首先,我们要知道在PHP中,异常是一个特殊的对象,它表示在程序执行过程中发生的问题。当一个异常被抛出时,正常的代码...
全局异常处理允许我们在整个应用程序范围内设置一个统一的错误处理机制,从而提高程序的健壮性和稳定性。 在Java中,我们可以利用`try-catch-finally`块来实现全局异常处理。通过在主程序或服务层创建一个全局的`...
在PHP中,异常处理机制提供了处理运行时错误的结构化方式。 首先,我们需要了解PHP中的异常是如何工作的。在PHP中,当遇到无法正常执行的代码块时,可以抛出一个异常。这通常通过`throw`关键字完成,后面跟着一个...