Правильная обработка ошибок в пользовательском Zend_Autoloader?

StackOverflow https://stackoverflow.com/questions/2454505

Вопрос

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