Maison  >  Article  >  développement back-end  >  Résumé de l'utilisation du chargement automatique php

Résumé de l'utilisation du chargement automatique php

怪我咯
怪我咯original
2017-07-06 10:47:091277parcourir

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.class

function autoload($class_name) {

$path =
str_replace('_', DIRECTORY_SEPARATOR , $ class_name);  
require_once $path.'.php'; >

$temp = new Main_Super_Class(); symbole de chemin, dans l'exemple ci-dessus, nous irons au fichier Main/Super/Class.php

. L'inconvénient de cette méthode est que lors du processus de codage, nous devons clairement savoir où doit être le fichier de code. , et parce que

Le chemin du fichier est codé en dur dans le nom de la classe. Si nous devons modifier la structure des dossiers, nous devons modifier manuellement tous les noms de classe.

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 :


Le code est le suivant :

<?php 
  $arr = array ( 
    &#39;Project/Classes&#39;, 
    &#39;Project/Classes/Children&#39;, 
    &#39;Project/Interfaces&#39; 
  );
  foreach($arr as $dir) { 
    $dir_list = opendir($dir);
    while ($file = readdir($dir_list)) { 
      $path = $dir.DIRECTORY_SEPARATOR.$file; 
      if(in_array($file, array(&#39;.&#39;, &#39;..&#39;)) || is_dir($path)) 
        continue;
      if (strpos($file, ".class.php")) 
        require_once $path; 
    } 
  } 
?>

Fichiers et emplacements associés

Une autre méthode consiste à établir un

fichier de configuration entre le fichier de classe et son emplacement, par exemple :

Le code est le suivant :

// configuration.php 
array_of_associations = array( 
  &#39;MainSuperClass&#39; = &#39;C:/Main/Super/Class.php&#39;, 
  &#39;MainPoorClass&#39; = &#39;C:/blablabla/gy.php&#39; 
);
appeler Le code du fichier


est le suivant :

<?php 
  require &#39;autoload_generated.php&#39;;
  function autoload($className) { 
    global $autoload_list; 
    require_once $autoload_list[$className]; 
  }
  $x = new A(); 
?>
Bien sûr, s'il y a trop de fichiers, ce sera une chose difficile à maintenir, mais c'est différent de coder en dur l'emplacement dans le nom de la classe, lequel est le meilleur ?

Bien sûr, nous ne voulons pas maintenir cette liste manuellement, nous pouvons donc utiliser la génération automatique de ce fichier pour y parvenir. this. Le fichier correspondant peut être phpxmljson et ainsi de suite. L'auteur de l'article original a implémenté un tel outil. Si vous y réfléchissez bien, ce n'est pas difficile à mettre en œuvre. L'auteur de l'article original a même développé un petit framework Autoload, qui mérite d'être appris.

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