Pregunta

Estoy construyendo un cargador automático personalizado basado en la carga automática de Zend Framework (pregunta relacionada aquí ).

El enfoque básico, tomado de esa pregunta, es

class My_Autoloader implements Zend_Loader_Autoloader_Interface 
{
    public function autoload($class) 
    {
        // add your logic to find the required classes in here
    }
}

y después de unión de la nueva clase cargador automático a un prefijo de clase.

Ahora lo que estoy seguro acerca es cómo controlar los errores dentro del método autoload (por ejemplo, "archivo de clase no encontrado") de una manera adecuada, ZF compatible. Soy nuevo en el marco, sus convenciones y estilo.

  • ¿Debo silencio falso de vuelta y dejar que el bloqueo de proceso de creación de clases?

  • emito un error o mensaje de registro de alguna manera (que sería bueno para identificar el problema) y volver falsa? Si es así, ¿cuál es la forma Zend de hacer eso?

  • ¿Es desencadenar un error?

  • ¿Debo lanzar una excepción? Si es así, ¿qué tipo?

¿Fue útil?

Solución

Eso depende del tipo de error. Lo consideraría un error fatal si una clase no se puede cargar. Por lo tanto me gustaría lanzar una excepción, por ejemplo.

class My_Autoloader_Exception extends Exception {}

Usted encontrará que ZF utiliza una gran cantidad de excepciones personalizadas en el nivel de paquete y también proporciona una clase para que esto se extienden desde (aunque me gustaría considerar esta opción).

Por cierto, hay un ejemplo de uso de Zend_Exception con su cargador automático:

  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
  }

Otros consejos

sí ZF utiliza dos enfoques diferentes:

  • Zend_Loader ( de edad mecanismo de carga automática) lanza un Zend_Exception en caso de que algo está mal
  • retornos Zend_Loader_Autoloader false cuando el cargador automático registrada utilizada devuelve false

El Zend_Loader_Autoloader no coge ninguna excepción lanzada en el cargador automático se utiliza para, finalmente, su excepción personalizada haría burbujear a través de la Zend_Loader_Autoloader. Yo personalmente acabo de volver false en caso de que no soy capaz de cargar una clase solicitada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top