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

Compréhension approfondie du mécanisme d'auto-chargement des classes en PHP

Chargement automatique en PHP :

En PHP5Avant, pour utiliser une classe ou une méthode de classe, il fallait inclure ou require, puis utiliser, ce qui était ennuyeux de devoir écrire un include pour chaque classe utilisée.

Les développeurs PHP voulaient que ce soit plus simple, pour qu'au moment de l'inclusion d'une classe, si elle n'est pas incluse, le système puisse automatiquement trouver cette classe et l'inclure automatiquement~

Ainsi, la fonction __autoload() est apparue.

Généralement placé dans la classe d'entrée de l'application, par exemple dans discuz, placé dans class_core.php.

Pour commencer, parlons d'un exemple simple :

Première situation:Le contenu du fichier A.php est le suivant

<?php
class A {
  public function __construct() {
      echo 'fff';
  }
}
?>

Le contenu du fichier C.php est le suivant :

<?php  
function __autoload($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
$a = new A(); //Côté ici, __autoload sera automatiquement appelé pour inclure le fichier A.php
?>

Deuxième cas :Parfois, je voudrais pouvoir personnaliser autoload et avoir un nom plus cool, loader, donc C.php devient ainsi :

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
spl_autoload_register('loader'); //Enregistrez une méthode d'auto-chargement, en remplacement de __autoload
$a = new A();
?>

Troisième casJe souhaite être plus élégant, utiliser une classe pour gérer l'auto-chargement

<?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();
?>

est la meilleure forme actuelle.

Généralement, nous utilisons spl_autoload_register(*) est placé dans le script d'entrée, c'est-à-dire dès le début. Par exemple, voici la méthode de discuz.

if(function_exist('spl_autoload_register')){
  spl_autoload_register(array('core', 'autoload')); //Si c'est PHP5Au-dessus, s'il existe une fonction d'enregistrement, enregistrez-vous la fonction autoload de la classe core que vous avez écrite.
}
  function __autoload($class){     //Si ce n'est pas le cas, redéfinissez la fonction native PHP __autoload pour qu'elle appelle sa fonction core.
    return core::autoload($class);
  }
}

Ce qui est mis au début du fichier d'entrée est naturellement excellent~

La présente explication approfondie du mécanisme d'auto-chargement des classes PHP est tout ce que je vous offre aujourd'hui. J'espère que cela vous servira de référence et que vous continuerez à soutenir le tutoriel Néon.

Vous pourriez aussi aimer