Le chargement automatique de PHP peut généralement utiliser deux méthodes : les méthodes autoload et spl. Ces deux méthodes ont des méthodes d'utilisation différentes
Méthode d'utilisation du chargement automatique 1 :
La méthode la plus couramment utilisée consiste à rechercher la classe en fonction du nom du fichier de classe, puis exiger. _one
Le code est le suivant :
function autoload($class_name) { $path = str_replace('_', '/', $class_name); require_once $path . '.php'; } // 这里会自动加载Http/File/Interface.php 文件 $a = new Http_File_Interface();
L'avantage de cette méthode est qu'elle est simple et facile à utiliser. Bien sûr, il y a aussi des inconvénients. L'inconvénient est que le nom de la classe et le chemin du fichier doivent être convenus. Lorsque la structure du fichier est modifiée, le nom de la classe doit être modifié.
Méthode d'utilisation du chargement automatique 2 (méthode de mappage direct)
Le code est le suivant :
$map = array( 'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' ); function autoload($class_name) { if (isset($map[$class_name])) { require_once $map[$class_name]; } } // 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 $a = new Http_File_Interface();
Cette méthode L'avantage est que le nom de la classe et le chemin du fichier sont uniquement conservés à l'aide d'un mappage. Ainsi, lorsque la structure du fichier change, il n'est pas nécessaire de modifier le nom de la classe, seuls les éléments correspondants dans le mappage doivent être modifiés.
L'inconvénient de cette méthode par rapport à la méthode précédente est qu'il est très difficile de maintenir ce mappage lorsqu'il y a trop de fichiers. Peut-être qu'à ce stade, vous envisagerez d'utiliser json ou un fichier séparé pour la maintenance. Peut-être penseriez-vous à utiliser un framework pour maintenir ou créer une telle cartographie.
spl_autoload
Le plus gros défaut du chargement automatique est qu'il ne peut pas avoir plusieurs méthodes de chargement automatique
D'accord, pensez au scénario suivant, les références de votre projet Si vous avez copié le projet de quelqu'un d'autre, votre projet a un chargement automatique et le projet de quelqu'un d'autre a également un chargement automatique, donc les deux chargements automatiques entreront en conflit. La solution est de modifier le chargement automatique pour en faire un, ce qui est sans doute très fastidieux.
Par conséquent, nous devons de toute urgence utiliser une pile d'appels à chargement automatique, afin que les fonctions de série de chargement automatique de spl apparaissent. Vous pouvez utiliser spl_autoload_register pour enregistrer plusieurs fonctions de chargement automatique personnalisées
Si votre version de PHP est supérieure à 5.1, vous pouvez utiliser spl_autoload
Comprenez d'abord plusieurs fonctions de spl :
spl_autoload est l'implémentation par défaut de _autoload(), il recherchera $class_name(.php/.inc) dans include_path
Spl_autoload implémente le chargement automatique :
Le code est le suivant :
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*test.php*/ <?php set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php $a = new http(); $a->callname();
Spl_autoload_register
Enregistrez la fonction dans la pile de fonctions de chargement automatique SPL :
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*test.php*/ <?php spl_autoload_register(function($class){ if($class == 'http'){ require_once("/home/yejianfeng/handcode/http.php"); } }); $a = new http(); $a->callname();
Appelez la fonction appelante enregistrée dans spl_autoload_register
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*http2.php*/ <?php class http { public function callname(){ echo "this is http2"; } } /*test.php*/ <?php spl_autoload_register(function($class){ if($class == 'http'){ require_once("/home/yejianfeng/handcode/http.php"); } if($class == 'http2'){ require_once("/home/yejianfeng/handcode/http2.php"); } }); spl_auto_call('http2'); $a = new http(); $a->callname(); //这个时候会输出"this is http2"
Le module AutoLoader de Zend utilise cette méthode. Extrait le code correspondant
spl_autoload_register(array(CLASS, 'autoload')); public static function autoload($class) { ….. }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!