PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)
2004-08-30 17:42
721 查看
(二)返回错误标记
脚本层次的错误处理比较粗糙但很有用。尽管如此,我们有时需要更大的灵活性。我们可以使用返回错误标识的办法来告诉客户代码“错误发生了!”。这将程序是否继续,如何继续的责任交给客户代码来决定。这里我们改进了前面的例子来返回一个脚本执行出错的标志(false是一个常用的不错的选择)。
index3.php
<?php
//PHP4
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
//PHP4
$mgr
=new
CommandManager
();
$cmd
=
$mgr
->
getCommandObject
(
'realcommand'
);
if(
is_bool
(
$cmd
)){
die(
"errorgettingcommand/n"
);
}else{
$cmd
->
execute
();
}
?>
orjustaloggederror:
<?php
//PHP4
$mgr
=new
CommandManager
();
$cmd
=
$mgr
->
getCommandObject
(
'realcommand'
);
if(
is_bool
(
$cmd
)){
error_log
(
"errorgettingcommand/n"
,
0
);
}
else{
$cmd
->
execute
();
}
?>
使用像“false”这样的错误标志的好处是直观,但是明显给出的信息量不够,我们无法得知到底是在哪一个环节上错而导致返回false。你可以再设置一个error属性,这样在产生错误后输出出错信息。
index4.php
<?php
//PHP4
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__
,
"Cannotfind$path/n"
);
return
false
;
}
require_once
$path
;
if(!
class_exists
(
$cmd
)){
$this
->
setError
(
__FUNCTION__
,
"class$cmddoesnotexist"
);
return
false
;
}
$ret
=new
$cmd
();
if(!
is_a
(
$ret
,
'Command'
)){
$this
->
setError
(
__FUNCTION__
,
"$cmdisnotaCommand"
);
return
false
;
}
return
$ret
;
}
}
?>
这个简单的机制可以让
setError()
记录下错误信息。其它代码可以通过error()来获得脚本错误的相关信息。你应该将这个功能抽取出来并放在一个最基本的类中,其它所用类都从这个类继承而来。这样可以统一处理错误,否则可能出现混乱。我就曾经见过有些程序在不同的类中使用
getErrorStr()
、
getError()和
error()
等功能相同的函数。
然而,实际开发中要让程序中的所有类都从同一个类中继承而来是很困难的,除非同时使用接口(interface)否则无法实现一些子类自身特有的功能,但那已经是PHP5的内容。就像我们将提到的,PHP5中提供了更好的解决方案。
相关文章推荐
- PHP5的异常处理机制[3]--PHP5之前的错误处理--返回Error flag(错误标记)
- PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()
- PHP5的异常处理机制[2]--PHP5之前的错误处理之trigger_error()
- PHP5的异常处理机制[5]--PHP5之前的错误处理--使用PEAR处理错误
- PHP5的异常处理机制[1]--PHP5之前的错误处理之die()
- PHP5的异常处理机制[6]--PHP5之前的错误处理--小结
- PHP5的异常处理机制[4]--PHP5之前的错误处理--使用PEAR处理错误
- PHP5的异常处理机制[5]--PHP5之前的错误处理--小结
- PHP5的异常处理机制[2]--PHP5之前的错误处理之die()
- PHP5的异常处理机制[10]--同时处理多个错误
- PHP5的异常处理机制[9]--同时处理多个错误
- PHP5的异常处理机制[14]--总结 [END]
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误。服务器返回的状态码为: 500
- 错误: Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理 请求时出现未知错误。服务器返回的状态码为: 500
- .net Webservice处理异常之SoapException封装-------处理业务流程执行的错误,向客户端返回原始错误信息
- PL/SQL 异常错误处理机制
- JavaScript 的错误(Error)与异常(Exception)处理
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误。服务器返回的状态码为: 500
- PHP 的异常处理、错误处理:error_reporting,try-catch,trigger_error,set_error_handler,set_exception_handler,regis
- 统一处理jquery ajax请求过程中的异常错误信息的机制