PHP5的异常处理机制之使用throw关键字
时间:2007-02-17 来源:PHP爱好者
建立一个Exception对象后你可以将对象返回,但不应该这样使用,更好的方法是用throw关键字来代替。throw用来抛出异常:
throw new Exception( "my message", 44 );
throw 将脚本的执行中止,并使相关的Exception对象对客户代码可用。
以下是改进过的getCommandObject() 方法:
index_PHP5.PHP
<?PHP
// PHP 5
require_once('cmd_PHP5/Command.PHP');
class CommandManager {
private $cmdDir = "cmd_PHP5";
function getCommandObject($cmd) {
$path = "{$this->cmdDir}/{$cmd}.PHP";
if (!file_exists($path)) {
throw new Exception("Cannot find $path");
}
require_once $path;
if (!class_exists($cmd)) {
throw new Exception("class $cmd does not exist");
}
$class = new ReflectionClass($cmd);
if (!$class->isSubclassOf(new ReflectionClass('Command'))) {
throw new Exception("$cmd is not a Command");
}
return new $cmd();
}
}
?>
代码中我们使用了PHP5的反射(Reflection)API来判断所给的类是否是属于Command 类型。在错误的路径下执行本脚本将会报出这样的错误:
Fatal error: Uncaught exception 'Exception' with message 'Cannot find command/xrealcommand.PHP' in /home/xyz/BasicException.PHP:10
Stack trace:
#0 /home/xyz/BasicException.PHP(26):
CommandManager->getCommandObject('xrealcommand')
#1 {main}
thrown in /home/xyz/BasicException.PHP on line 10
默认地,抛出异常导致一个fatal error。这意味着使用异常的类内建有安全机制。而仅仅使用一个错误标记,不能拥有这样的功能。处理错误标记失败只会你的脚本使用错误的值来继续执行。
php爱好者站 http://www.phpfans.net 网页制作|网站建设|数据采集.
throw new Exception( "my message", 44 );
throw 将脚本的执行中止,并使相关的Exception对象对客户代码可用。
以下是改进过的getCommandObject() 方法:
index_PHP5.PHP
<?PHP
// PHP 5
require_once('cmd_PHP5/Command.PHP');
class CommandManager {
private $cmdDir = "cmd_PHP5";
function getCommandObject($cmd) {
$path = "{$this->cmdDir}/{$cmd}.PHP";
if (!file_exists($path)) {
throw new Exception("Cannot find $path");
}
require_once $path;
if (!class_exists($cmd)) {
throw new Exception("class $cmd does not exist");
}
$class = new ReflectionClass($cmd);
if (!$class->isSubclassOf(new ReflectionClass('Command'))) {
throw new Exception("$cmd is not a Command");
}
return new $cmd();
}
}
?>
代码中我们使用了PHP5的反射(Reflection)API来判断所给的类是否是属于Command 类型。在错误的路径下执行本脚本将会报出这样的错误:
Fatal error: Uncaught exception 'Exception' with message 'Cannot find command/xrealcommand.PHP' in /home/xyz/BasicException.PHP:10
Stack trace:
#0 /home/xyz/BasicException.PHP(26):
CommandManager->getCommandObject('xrealcommand')
#1 {main}
thrown in /home/xyz/BasicException.PHP on line 10
默认地,抛出异常导致一个fatal error。这意味着使用异常的类内建有安全机制。而仅仅使用一个错误标记,不能拥有这样的功能。处理错误标记失败只会你的脚本使用错误的值来继续执行。
php爱好者站 http://www.phpfans.net 网页制作|网站建设|数据采集.
相关阅读 更多 +