基于我已经问过的关于异常的问题,我担心我可能会错误地编写 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;
}
你可以看到他们如何在底部附近抛出一个新的异常消息,这个函数不会被调用:
try{}catch(){}
然而,当它抛出异常时,“未捕获的带有消息的异常”没有问题