Una corretta gestione in un costume Zend_Autoloader errore?
-
20-09-2019 - |
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?
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 unaZend_Exception
nel caso in cui qualcosa non va - restituisce
Zend_Loader_Autoloader
false
quando il caricatore automatico raccomandati utilizzato ritornafalse
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.