English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Autoload di PHP:
Prima di PHP 5, per utilizzare un certaine classe o metodo di una classe, era necessario includere o richiedere, poi poterlo utilizzare, per ogni classe usata, bisognava scrivere una include, fastidioso
L'autore di PHP voleva semplificare, sarebbe stato bello che quando si richiede una classe, se non è già inclusa, il sistema possa trovare automaticamente la classe e includerla automaticamente~
E così è nata la funzione __autoload().
Di solito è messo all'interno della classe di ingresso dell'applicazione, ad esempio in discuz, è messo in class_core.php.
Parliamo prima di un esempio semplice:
Prima situazione:Il contenuto del file A.php è il seguente
<?php class A{ public function __construct(){ echo 'fff'; } } ?>
Il contenuto del file C.php è il seguente:
<?php function __autoload($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } $a = new A(); //Lì verrà automaticamente chiamata __autoload, includendo il file A.php ?>
Seconda situazione:A volte vorrei essere in grado di personalizzare autoload e dare a loader un nome più cool, quindi C.php diventa così:
<?php function loader($class)} { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } spl_autoload_register('loader'); //Registra un metodo di caricamento automatico, sostituendo il precedente __autoload $a = new A(); ?>
Terza situazioneVoglio essere più elegante, usare una classe per gestire il caricamento automatico
<?php class Loader { public static function loadClass($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } } spl_autoload_register(array('Loader', 'loadClass')); $a = new A(); ?>
Questa è la forma migliore.
Di solito mettiamo spl_autoload_register(*) nel file di script di ingresso, ossia all'inizio. Ad esempio, il metodo di discuz qui sotto.
if(function_exist('spl_autoload_register')){ spl_autoload_register(array('core','autoload')); //Se è php5 o superiore, esiste una funzione di registrazione, allora registra la tua scrittura core di autoload come funzione di caricamento automatico }else{ function __autoload($class){ //Se non è così, ridefinisci la funzione nativa php __autoload, in modo che richiami la funzione core nel proprio core.} return core::autoload($class); } }
Questo viene messo all'inizio del file di ingresso, naturalmente è molto buono~
Ecco tutto il contenuto che ti ho condiviso sull'integrazione automatica delle classi PHP, spero che ti sia utile come riferimento e ti auguro di continuare a supportare la guida urla.