我正在构建一个基于 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 万一我无法加载请求的类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top