Domanda

Sto costruendo una caricatore automatico personalizzato in base a caricamento automatico di Zend Framework (connessa interrogazione qui ).

L'approccio di base, preso da questa domanda, è

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

e quindi vincolante la nuova classe autoloader a un prefisso di classe.

Ora quello che sono sicuro circa è come gestire gli errori all'interno del metodo autoload (ad esempio, "file di classe non trovato") in una vera e propria strada, ZF compliant. Sono nuovo al quadro, le sue convenzioni e lo stile.

  • Ho tranquillamente return false e lasciare che il crash del processo di creazione della classe?

  • posso riprodurre un errore o di registrare il messaggio in qualche modo (che sarebbe bello per individuare il problema) e restituire false? Se è così, qual è il modo Zend di fare questo?

  • Devo attivare un errore?

  • Ho un'eccezione? Se sì, di che tipo?

È stato utile?

Soluzione

Questo dipende dal tipo di errore. Mi piacerebbe prendere in considerazione che un errore fatale se una classe non può essere caricato. Così mi piacerebbe un'eccezione, per es.

class My_Autoloader_Exception extends Exception {}

Troverete che ZF utilizza un sacco di eccezioni personalizzate a livello pacchetto e anche fornisce una classe per questo per estendere da (anche se mi piacerebbe prendere in considerazione questa opzione).

Per inciso, v'è un esempio di utilizzo di Zend_Exception con il caricatore automatico:

  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
  }

Altri suggerimenti

ZF stesso utilizza due diversi approcci:

  • Zend_Loader ( vecchia meccanismo di caricamento automatico) lancia una Zend_Exception nel caso in cui qualcosa non va
  • restituisce Zend_Loader_Autoloader false quando il caricatore automatico raccomandati utilizzato ritorna false

Il Zend_Loader_Autoloader non prendere alcuna eccezione generata nel caricatore automatico utilizzato per alla fine il tuo eccezione personalizzata sarebbe bolla attraverso il Zend_Loader_Autoloader. Io personalmente appena ritorno false nel caso in cui io non sono in grado di caricare una classe richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top