Правильная обработка ошибок в пользовательском Zend_Autoloader? - PullRequest
1 голос
/ 16 марта 2010

Я создаю собственный автозагрузчик на основе автозагрузки 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?

  • Я могу вызвать ошибку?

  • Я выбрасываю исключение? Если да, то какой?

Ответы [ 2 ]

2 голосов
/ 16 марта 2010

ZF сама использует два разных подхода:

  • Zend_Loader ( старый механизм автозагрузки) выдает Zend_Exception в случае, если что-то не так
  • Zend_Loader_Autoloader возвращает false, когда используемый зарегистрированный автозагрузчик возвращает false

Zend_Loader_Autoloader не перехватывает никаких исключений, генерируемых в используемом автозагрузчике, чтобы в конечном итоге ваше пользовательское исключение всплыло через Zend_Loader_Autoloader. Лично я просто возвращаю false в случае, если я не могу загрузить запрошенный класс.

1 голос
/ 16 марта 2010

Это зависит от вида ошибки. Я считаю это фатальной ошибкой, если класс не может быть загружен. Таким образом, я бы выбросил исключение, например

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
  }
...