2010-03-16 1 views
1

Я создаю пользовательский автозагрузчик на основе автоматической загрузки Zend Framework (связанный с этим вопрос here).Правильная обработка ошибок в пользовательском Zend_Autoloader?

Основной подход, взятый из этого вопроса, является

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?

  • Я вызываю ошибку?

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

ответ

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

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

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

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