我正在构建一个基于Zend Framework自动加载的自定义自动加载器(相关问题here)。
从这个问题中得出的基本方法是
class My_Autoloader implements Zend_Loader_Autoloader_Interface
{
public function autoload($class)
{
// add your logic to find the required classes in here
}
}
然后将新的自动加载器类绑定到类前缀。
现在我不确定的是如何以正确的ZF兼容方式处理autoload
方法中的错误(例如,“找不到类文件”)。我是框架,它的惯例和风格的新手。
我是否会悄悄地返回false并让类创建过程崩溃?
我是否以某种方式输出错误或日志消息(这可以很好地查明问题)并返回false?如果是这样,Zend的做法是什么?
我是否会触发错误?
我是否会抛出异常?如果是这样,那是什么?
答案 0 :(得分:2)
ZF本身使用两种不同的方法:
Zend_Loader
(旧自动加载机制)会在出现问题时抛出Zend_Exception
Zend_Loader_Autoloader
时,false
会返回false
Zend_Loader_Autoloader
未捕获使用过的自动加载器中引发的任何异常,最终您的自定义异常将通过Zend_Loader_Autoloader
冒出。我个人只是返回false
,以防我无法加载请求的类。
答案 1 :(得分:1)
这取决于错误的类型。如果无法加载类,我认为这是一个致命的错误。因此,我会抛出异常,例如
class My_Autoloader_Exception extends Exception {}
你会发现ZF在包级别上使用了很多自定义异常,并且provides a class也是为了扩展(尽管我认为这是可选的)。
顺便提一下,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
}