Maison  >  Article  >  développement back-end  >  Explication détaillée des exemples d'utilisation du mécanisme de chargement automatique de PHP

Explication détaillée des exemples d'utilisation du mécanisme de chargement automatique de PHP

伊谢尔伦
伊谢尔伦original
2017-07-01 09:33:351449parcourir

Depuis PHP5, la méthode d'intercepteur de chargement automatique a été introduite, qui peut automatiquement inclure des références dans les fichiers de classe. Voir l'utilisation spécifique ci-dessous.

Pendant le processus de développement PHP, si vous souhaitez introduire une classe de l'extérieur, vous utilisez généralement les méthodes include et require pour inclure le fichier qui définit cette classe. Cependant, cela peut entraîner un grand nombre d'appels de méthode include ou require dans le nouveau script qui fait référence au fichier. En cas d'omission accidentelle, des erreurs se produiront, rendant le code difficile à maintenir.

Depuis PHP5, la méthode d'intercepteur de chargement automatique a été introduite, qui peut automatiquement inclure des références aux fichiers de classe. Habituellement, nous écrirons comme ceci :

function autoload($className) { 
include_once $className . '.class.php'; 
} 
$user = new User();

Lorsque le moteur PHP tente d'instancier un fichier. inconnu Lors de l'exploitation d'une classe, la méthode autoload() sera appelée, donnant à PHP la dernière chance de charger la classe requise avant qu'une erreur ne se produise. Par conséquent, lorsque le code ci-dessus est exécuté, le moteur PHP exécute automatiquement la méthode de chargement automatique pour nous et inclut le fichier User.class.php.

Les exceptions levées dans la fonction de chargement automatique ne peuvent pas être interceptées par le bloc d'instruction catch et entraînent une erreur fatale.

Si vous utilisez le mode interactif CLI de PHP, le mécanisme de chargement automatique ne sera pas exécuté.

Lorsque vous souhaitez utiliser des règles de nommage de style PEAR, par exemple, vous devez introduire le fichier User/Register.php, vous pouvez également l'implémenter comme ceci :

//加载我 
function autoload($className) { 
$file = str_replace('_', DIRECTORY_SEPARATOR, $className); 
include_once $file . 'php'; 
} 
$userRegister = new User_Register();

Cette méthode C'est pratique, mais dans un grand nombre de bibliothèques de classes, si plusieurs bibliothèques de classes sont introduites dans une application, des problèmes inexplicables peuvent survenir en raison des mécanismes de chargement automatique des différentes bibliothèques de classes. Après l'introduction de la bibliothèque standard SPL dans PHP5, nous avons une nouvelle solution, la fonction spl_autoload_register().

La fonction de cette fonction est d'enregistrer la fonction dans la pile de fonctions de chargement automatique de SPL et de supprimer la fonction autoload() par défaut du système. Une fois la fonction spl_autoload_register() appelée, lorsqu'une classe non définie est appelée, le système appellera toutes les fonctions enregistrées dans la fonction spl_autoload_register() dans l'ordre au lieu d'appeler automatiquement la fonction autoload(). L'exemple suivant appelle User/Register.php. à la place User_Register.class.php :

Copier le code Le code est le suivant :

//不加载我 
function autoload($className) { 
include_once $className . '.class.php'; 
} 
//加载我 
function autoload($className) { 
$file = str_replace('/', DIRECTORY_SEPARATOR, $className); 
include_once $file . '.php'; 
} 
//开始加载 
spl_autoload_register('autoload'); 
$userRegister = new User_Register();

Lors de l'utilisation de spl_autoload_register(), nous pouvons également envisager d'utiliser a Pour une méthode d'appel d'initialisation plus sûre, la référence est la suivante :

Le code est le suivant :

//系统默认autoload函数 
function autoload($className) { 
include_once $className . '.class.php'; 
} 
//可供SPL加载的autoload函数 
function autoload($className) { 
$file = str_replace('_', DIRECTORY_SEPARATOR, $className); 
include_once $file . '.php'; 
} 
//不小心加载错了函数名,同时又把默认autoload机制给取消了……囧 
spl_autoload_register('_autoload', false); 
//容错机制 
if(false === spl_autoload_functions()) { 
if(function_exists('autoload')) { 
spl_autoload_register('autoload', false); 
} 
}

Dans un environnement Unix/Linux, si vous disposez de plusieurs classes, afin qu'elles soient faciles à gérer. Lorsqu'elles sont toutes écrites dans un fichier php, elles peuvent être rapidement distribuées en plusieurs copies avec des noms de classe différents en créant des liens symboliques avec la commande ln -s, puis chargées via le mécanisme de chargement automatique. .

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