自定义Zend_Autoloader中的正确错误处理?

时间:2010-03-16 13:08:56

标签: php zend-framework zend-autoloader

我正在构建一个基于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的做法是什么?

  • 我是否会触发错误?

  • 我是否会抛出异常?如果是这样,那是什么?

2 个答案:

答案 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
  }