Lorsque nous utilisons des classes en PHP, nous devons les charger avant utilisation, que ce soit via require ou include, mais il y aura deux problèmes qui affecteront notre décision de chargement
En PHP, le chargement automatique est fourni pour nous aider à inclure facilement fichiers, mais le chargement automatique n'est pas capable de gérer toutes les situations comme on l'imaginait. Aujourd'hui, nous allons enregistrer certains des problèmes de chargement automatique que nous avons rencontrés il y a quelques jours.
Pourquoi utiliser Autoload
Lors de l'utilisation de classes en PHP, nous devons les charger avant utilisation, que ce soit via la méthode require ou include, mais il y aura Il y a deux problèmes qui affectent notre décision de charger.
La première est que je ne sais pas où ce fichier de classe est stocké, et l'autre est que je ne sais pas quand j'ai besoin d'utiliser ce fichier. Surtout lorsqu'il y a beaucoup de fichiers projet, il est impossible d'écrire une longue chaîne de require au début de chaque fichier...
Après PHP5, nous pouvons résoudre ce problème grâce au chargement automatique. Et après PHP5.1, spl_autoload_register() est également fourni pour fournir un mécanisme de chargement plus complet.
Après avoir lu l'article Chargement automatique en PHP, je comprends le mécanisme de chargement d'Autoload Lorsqu'une classe est instanciée via new, PHP chargera le fichier correspondant via la fonction de chargement automatique définie si ce fichier de classe Si vous utilisez <.>extends ou implémente et doit utiliser d'autres fichiers de classe, PHP réexécutera le chargement automatique pour rechercher et charger les fichiers de classe. S'il y a deux requêtes pour le même fichier de classe, une erreur sera signalée. L'auteur de l'article original a fourni trois exemples intéressants pour illustrer ce problème, qui peuvent être consultés en téléchargeant le code source ici.
Généralement, il existe de nombreuses façons de résoudre le problème de recherche de fichiers à l'emplacement correspondant lors du chargement. La méthode la plus couramment utilisée consiste à spécifier une norme de dénomination spécifique.Méthode de Zend
zend recommande l'une des méthodes les plus populaires, qui consiste à inclure le chemin dans le nom du fichier. Par exemple, l'exemple suivant : // Main.classfunction autoload($class_name) { $path =
str_replace('_', DIRECTORY_SEPARATOR , $ class_name);
require_once $path.'.php'; >
Méthode 'Inclure tout'
Si vous êtes dans un environnement de développement et que vous ne vous souciez pas beaucoup de la vitesse, il est très utile de utiliser cette méthode pratique. En plaçant tous les fichiers de classe dans un ou plusieurs dossiers spécifiques, puis en les parcourant pour les rechercher et les charger. Par exemple :<?php $arr = array ( 'Project/Classes', 'Project/Classes/Children', 'Project/Interfaces' ); foreach($arr as $dir) { $dir_list = opendir($dir); while ($file = readdir($dir_list)) { $path = $dir.DIRECTORY_SEPARATOR.$file; if(in_array($file, array('.', '..')) || is_dir($path)) continue; if (strpos($file, ".class.php")) require_once $path; } } ?>
Fichiers et emplacements associés
Une autre méthode consiste à établir unfichier de configuration entre le fichier de classe et son emplacement, par exemple :
// configuration.php array_of_associations = array( 'MainSuperClass' = 'C:/Main/Super/Class.php', 'MainPoorClass' = 'C:/blablabla/gy.php' );
<?php require 'autoload_generated.php'; function autoload($className) { global $autoload_list; require_once $autoload_list[$className]; } $x = new A(); ?>
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!