【发布时间】:2013-02-18 22:19:12
【问题描述】:
Building upon a question I already asked regarding exceptions,我怕我写错了php函数,或者滥用了异常。我之所以这么说,是因为如果要使用 try/catch 块捕获自定义异常,则使用以下函数:
public function get_specific_page($page) {
if (!is_array( $this->_page )){
throw new AisisCore_Template_TemplateException( "<div class='error'>Trying to get a property from a non array.</div>" );
}
return $this->_page[$page];
}
然后会被称为:
try{
get_specific_page($page);
}
catch(Exception $e){
echo $e->getMessage();
}
这种方法的问题是我有很多这样写的函数,要么检查文件是否存在,要么抛出错误。检查是否在数组中设置了一个值,抛出一个错误,我的问题是处理这些函数调用的文件可能会因 try catch 而过载.....
所以我的问题是,我将如何更好地编写这样的函数,这样我的 php 文件就不会被 try catch 语句过度加载,但仍然能够拥有自己的自定义函数。
是否像在它自己的函数中编写try catch一样明显?
我问的原因是因为我习惯于与成名的工作以及在我们编写函数的公司中工作,如您在上面看到的那样。我如何使用具有大量这些功能的代码库,并且我没有看到使用它们的一半文件执行了一堆尝试捕获......
更新:
我正在查看 zend 源以更好地理解异常并遇到了这个问题:
public function setMessage($messageString, $messageKey = null)
{
if ($messageKey === null) {
$keys = array_keys($this->_messageTemplates);
foreach($keys as $key) {
$this->setMessage($messageString, $key);
}
return $this;
}
if (!isset($this->_messageTemplates[$messageKey])) {
require_once 'Zend/Validate/Exception.php';
throw new Zend_Validate_Exception("No message template exists for key '$messageKey'");
}
$this->_messageTemplates[$messageKey] = $messageString;
return $this;
}
你可以看到他们如何在底部附近抛出一个新的异常消息,这个函数不是通过doing调用的:
try{}catch(){}
然而,当它抛出异常时,“未捕获的带有消息的异常”没有问题
【问题讨论】:
-
Zend 有自己的异常处理程序,其中一些是处理程序自己捕获的。