PHP5的异常处理机制之使用throw关键字

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

建立一个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。这意味着使用异常的类内建有安全机制。而仅仅使用一个错误标记,不能拥有这样的功能。处理错误标记失败只会你的脚本使用错误的值来继续执行。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航