Traditionnellement, en PHP, lorsqu'on veut utiliser un fichier de classe, on doit l'exiger ou l'inclure en tête du document : Cet article vous présente principalement les points de connaissances liés au chargement automatique (autoloading) de PHP fichiers et Pour une utilisation détaillée, les amis qui ont besoin de ces informations peuvent s'y référer. J'espère que cela pourra être utile à tout le monde.
<?php require_once('../includes/functions.php'); require_once('../includes/database.php'); require_once('../includes/user.php'); ...
Mais une fois qu'il y a trop de documents à appeler, il faut écrire une ligne à chaque fois, ce qui n'a pas l'air joli. un moyen de créer du PHP. Qu'en est-il du chargement automatique des documents ?
<?php function __autoload($class_name) { require "./{$class_name}.php"; }
Oui, vous pouvez utiliser la fonction magique de PHP __autoload(). L'exemple ci-dessus charge automatiquement le fichier PHP dans le répertoire courant. Bien sûr, dans la pratique, nous sommes plus susceptibles de l'utiliser comme ceci :
<?php function __autoload($class_name) { $name = strtolower($class_name); $path = "../includes/{$name}.php"; if(file_exists($path)){ require_once($path); }else{ die("the file {$class_name} could not be found"); } }
Autrement dit, nous effectuons un certain traitement de cas du nom de fichier, puis vérifiez le fichier avant d'exiger s'il existe, sinon, affichez des informations personnalisées.
Un usage similaire est souvent observé dans des projets privés, ou dans le cadre d'un seul projet. Pourquoi ? Étant donné que vous ne pouvez définir qu'une seule fonction __autoload, dans le développement multi-personnes, il est impossible pour différents développeurs d'utiliser différents chargeurs automatiques personnalisés, à moins que tout le monde n'ait accepté à l'avance d'utiliser un seul __autoload, et que toute modification soit impliquée. La synchronisation des versions est gênante.
Principalement à cause de cela, la bonne nouvelle est que la fonction __autoload sera bientôt obsolète dans la version 7.2 de PHP.
Attention Cette fonctionnalité est obsolète depuis PHP 7.2.0. Il est fortement déconseillé de s'appuyer sur cette fonctionnalité.
Ensuite, elle est remplacée par quelque chose appelé spl_autoload_register(), qui a l'avantage d'être personnalisable. Plusieurs chargeurs automatiques. .
//使用匿名函数来autoload spl_autoload_register(function($class_name){ require_once('...'); });
//使用一个全局函数 function Custom() { require_once('...'); } spl_autoload_register('Custom');
//使用一个class当中的static方法 class MyCustomAutoloader { static public function myLoader($class_name) { require_once('...'); } } //传array进来,第一个是class名,第二个是方法名 spl_autoload_register(['MyCustomAutoloader','myLoader']);
//甚至也可以用在实例化的object上 class MyCustomAutoloader { public function myLoader($class_name) { } } $object = new MyCustomAutoloader; spl_autoload_register([$object,'myLoader']);
Il convient de mentionner qu'en utilisant le chargement automatique, qu'il s'agisse de __autoload() ou de spl_autoload_register(), par rapport à require ou include, l'avantage est que le mécanisme de chargement automatique est un chargement paresseux, c'est-à-dire qu'il ne vous appartient pas. les fichiers seront appelés pour vous dès son exécution, mais seuls ceux que vous utilisez, tels que les nouveaux fichiers, seront chargés via le mécanisme de chargement automatique.
Bien sûr, spl_autoload_register est souvent utilisé dans Laravel, y compris divers packages, comme ici :
/** * Prepend the load method to the auto-loader stack. * * @return void */ protected function prependToLoaderStack() { spl_autoload_register([$this, 'load'], true, true); }
Recommandations associées :
Tutoriel Zend Framework : Explication détaillée de l'utilisation du chargement automatique
Le standard PSR-0 de PHP utilise l'espace de noms pour le chargement automatique
Tutoriel Zend Framework : Chargement automatique Utilisation Explication détaillée
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!