English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

深入理解PHP类的自动载入机制

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.