自定义 Zend_Autoloader 中的正确错误处理?
-
20-09-2019 - |
题
我正在构建一个基于 Zend Framework 的自动加载的自定义自动加载器(相关问题 这里).
从该问题中得出的基本方法是
class My_Autoloader implements Zend_Loader_Autoloader_Interface
{
public function autoload($class)
{
// add your logic to find the required classes in here
}
}
然后将新的自动加载器类绑定到类前缀。
现在我不确定的是如何处理内部的错误 autoload
方法(例如,“未找到类文件”)以正确的、符合 ZF 的方式。我对这个框架、它的惯例和风格都很陌生。
我是否会悄悄返回 false 并让类创建过程崩溃?
我是否以某种方式输出错误或日志消息(这可以很好地查明问题)并返回 false?如果是这样,Zend 的做法是什么?
我会触发错误吗?
我会抛出异常吗?如果有的话,是什么样的?
解决方案
这取决于错误的类型。如果无法加载类,我会认为这是一个致命错误。因此我会抛出一个异常,例如
class My_Autoloader_Exception extends Exception {}
你会发现ZF在包级别使用了很多自定义异常,而且 提供一个类 对此进行扩展(尽管我认为这是可选的)。
顺便说一句,有一个使用示例 Zend_Exception
与他们的自动装载机:
try {
// Calling Zend_Loader::loadClass() with a non-existant class will cause
// an exception to be thrown in Zend_Loader:
Zend_Loader::loadClass('nonexistantclass');
} catch (Zend_Exception $e) {
echo "Caught exception: " . get_class($e) . "\n";
echo "Message: " . $e->getMessage() . "\n";
// Other code to recover from the error
}
其他提示
ZF 本身使用两种不同的方法:
Zend_Loader
(这 老的 自动加载机制)抛出一个Zend_Exception
以防出现问题Zend_Loader_Autoloader
回报false
当使用的已注册自动加载机返回时false
这 Zend_Loader_Autoloader
不会捕获使用过的自动加载器中抛出的任何异常,最终您的自定义异常将通过 Zend_Loader_Autoloader
. 。我个人只是回来 false
万一我无法加载请求的类。
不隶属于 StackOverflow