Maison  >  Article  >  développement back-end  >  Tutoriel d'utilisation simple du mécanisme de chargement automatique autoLoad

Tutoriel d'utilisation simple du mécanisme de chargement automatique autoLoad

伊谢尔伦
伊谢尔伦original
2017-07-01 09:37:011659parcourir

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 :
Tutoriel d'utilisation simple du mécanisme de chargement automatique autoLoad

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 :

Le code est le suivant :

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
}); 

$a = new http(); 
$a->callname();
spl_autoload_call


Appelez la fonction appelante enregistrée dans spl_autoload_register

Le code est le suivant :

/*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 == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
if($class == &#39;http2&#39;){ 
require_once("/home/yejianfeng/handcode/http2.php"); 
} 
}); 
spl_auto_call(&#39;http2&#39;); 
$a = new http(); 
$a->callname(); //这个时候会输出"this is http2"
La fonction spl_auto_register nous permet d'utiliser une fonction personnalisée pour le chargement automatique sans utiliser le chargement automatique. Cette méthode est désormais couramment utilisée.

Le module AutoLoader de Zend utilise cette méthode. Extrait le code correspondant

Le code est le suivant :

spl_autoload_register(array(CLASS, &#39;autoload&#39;)); 

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn