1

我正在构建一个基于 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
    }
}

然后将新的自动加载器类绑定到类前缀。

现在我不确定如何以autoload适当的、符合 ZF 的方式处理方法内部的错误(例如,“找不到类文件”)。我是这个框架、它的约定和风格的新手。

  • 我是否悄悄地返回 false 并让类创建过程崩溃?

  • 我是否以某种方式输出错误或日志消息(这会很好地查明问题)并返回错误?如果是这样,Zend 的做法是什么?

  • 我会触发错误吗?

  • 我会抛出异常吗?如果有,是什么样的?

4

2 回答 2

2

ZF 本身使用两种不同的方法:

  • Zend_Loader的自动加载机制)抛出一个Zend_Exception以防出现问题
  • Zend_Loader_Autoloaderfalse当使用的注册自动加载器返回时返回false

The Zend_Loader_Autoloader doesn't catch any exception thrown in the used autoloader to eventually your custom exception would bubble up through the Zend_Loader_Autoloader. I personally just return false in case I'm not able to load a requested class.

于 2010-03-16T13:23:32.727 回答
1

这取决于错误的类型。如果无法加载类,我会认为这是一个致命错误。因此我会抛出一个异常,例如

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
  }
于 2010-03-16T13:20:08.757 回答