2012-06-21 17 views
16
class Manage 
{ 

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 
} 

Dire che ho un codice come sopra. Ho scelto di utilizzare il metodo di funzione anonimo per caricare le classi, ma come viene utilizzato? In che modo esattamente determina quale '$class' caricare?Come usare spl_autoload_register?

+0

Il codice è sbagliato. O metti 'sql_autoload_register' di classe' Manage' o mettilo in un metodo. – xdazz

+2

@zerkms Cosa c'e 'oggi con gli OP e le loro bocche? E perché stanno sempre attaccando le mod? –

+1

La prima cosa che dovresti fare è sintassi-error-check il tuo codice prima di postarlo qui. – hakre

risposta

21

Non è possibile inserire il codice lì. È necessario aggiungere il registro SPL dopo la lezione. Se si voleva registrare una funzione all'interno della classe Manage si potrebbe fare:

class Manage { 
    public static function autoload($class) { 
     include $class . '.class.php'; 
    } 
} 

spl_autoload_register(array('Manage', 'autoload')); 

Tuttavia, come avete dimostrato è possibile utilizzare una funzione anonima. Non hai nemmeno bisogno di una classe, in modo da poter semplicemente fare:

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 

In entrambi i casi, la funzione specificata viene aggiunta ad un pool di funzioni che sono responsabili di caricamento automatico. La tua funzione viene aggiunta a questa lista (quindi se ce ne fossero già nella lista, la tua sarà l'ultima). Con questo, quando si fa qualcosa di simile:

UnloadedClass::someFunc('stuff'); 

PHP si renderà conto che UnloadedClass non è stato ancora dichiarato. Quindi itererà attraverso l'elenco delle funzioni di caricamento automatico SPL. Chiamerà ciascuna funzione con un argomento: 'UnloadedClass'. Quindi, dopo che ogni funzione è stata chiamata, controlla se la classe esiste ancora. Se non lo fa continua fino a raggiungere la fine della lista. Se la classe non viene mai caricata, si verificherà un errore irreversibile che ti dice che la classe non esiste.

12

Come determina esattamente quale "classe $" caricare?

Il $class viene passato automaticamente da php. Ed è il nome della classe non ancora dichiarata, ma usata da qualche parte in runtime

+0

bello. grazie uomo. Questo è quello che volevo sapere. – Viraths