Cet article présente principalement les points de connaissances pertinents et l'utilisation détaillée du chargement automatique des fichiers PHP. Les amis qui en ont besoin peuvent s'y référer.
Traditionnellement, en PHP, lorsqu'on veut utiliser un fichier de classe, on doit l'exiger ou l'inclure en tête du document :
<?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, vous devez écrire une ligne à chaque fois, ce qui n'a pas l'air joli. Existe-t-il un moyen de charger automatiquement les documents PHP ?
<?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, en pratique, on a plus tendance à l'utiliser ainsi :
<?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"); } }
, ce qui implique de faire un certain traitement de dossier sur le dossier nom, puis dans require Vérifiez si le fichier existe auparavant et affichez des informations personnalisées s'il n'existe pas.
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'accepte à l'avance d'utiliser un seul __autoload et que toute modification soit apportée.
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 que l'avantage d'utiliser le chargement automatique, qu'il s'agisse de __autoload() ou de spl_autoload_register(), par rapport à require ou include est que le mécanisme de chargement automatique est paresseux chargement, c'est-à-dire qu'il n'appelle pas tous les fichiers pour vous dès que vous l'exécutez, mais seuls ceux que vous utilisez, comme 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 :
Explication détaillée des techniques PHP pour utiliser mb_strpos en PHP
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!