Maison  >  Article  >  développement back-end  >  Explication détaillée de deux fonctions de chargement automatique PHP

Explication détaillée de deux fonctions de chargement automatique PHP

零到壹度
零到壹度original
2018-04-11 13:34:332069parcourir

Lors de l'utilisation du framework ThinkPHP, il est utile de visualiser les deux fonctions __autoload et apl_autoload_register lors de la visualisation de son code source, et ces deux fonctions sont utilisées pour le chargement automatique. Sa fonction principale est que lorsque votre fichier de code source utilise un fichier qui n'a pas été chargé, ces deux fonctions seront déclenchées pour charger le fichier déchargé

La fonction __autoload de PHP est une fonction magique avant l'apparition de cette fonction, si. 100 objets étaient référencés dans un fichier PHP, le fichier devrait alors utiliser include ou nécessiter l'introduction de 100 fichiers de classe, ce qui rendrait le fichier PHP extrêmement volumineux. Il y a donc cette fonction __autoload.

Quand la fonction __autoload est-elle appelée ?

Lorsque le mot-clé new est utilisé pour instancier un objet dans un fichier php, si la classe n'est pas définie dans ce fichier php, la fonction __autoload sera déclenchée. A ce moment, vous pourrez introduire la définition du. fichier php de classe, puis il peut être instancié avec succès. (Remarque : si l'objet à instancier a trouvé la définition de la classe dans ce fichier, la fonction __autoload ne sera pas déclenchée)

#Animal.php<?php
   class Animal{}?>
#main.php<?php
  function __autoload($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }  $ani = new Animal();?>

Comme les deux fichiers ci-dessus, exécutez php main.php
(1) Lors de l'exécution de new Animal(), on constate que la classe Animal n'est pas définie
(2) La fonction __autoload est déclenchée, ce qui introduit le fichier Animal.php ; (3) Instanciation réussie.
D'accord, après avoir compris le rôle de la fonction __autoload, jetons un œil au rôle de la fonction spl_autoload_register.
Le rôle de la fonction spl_autoload_register est de remplacer les paramètres de la fonction personnalisée par la fonction __autoload (remarque : lorsque __autoload et spl_autoload_register apparaissent dans le fichier en même temps, spl_autoload_register prévaudra)
Ensuite, en remplaçant main.php par le ce qui suit aura le même effet Fonction :

#main.php<?php
  function myLoad($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }
  spl_autoload_register("myLoad");  $ani = new Animal();?>
Lors de l'utilisation du framework ThinkPHP, il est utile de vérifier son code source pour utiliser les deux fonctions __autoload et apl_autoload_register, et ces deux fonctions sont utilisées pour le chargement automatique. , source de données https://blog.csdn.net/gavin_new/article/details/52805811

Sa fonction principale est que lorsque votre fichier de code source utilise un fichier qui n'a pas été chargé, ces deux fonctions seront déclenchées Load. ce fichier déchargé

La fonction __autoload de PHP est une fonction magique Avant que cette fonction n'apparaisse, si 100 objets sont référencés dans un fichier PHP, alors le fichier doit être introduit en utilisant 100 fichiers de classe, ce qui le fera. ce qui rend le fichier php extrêmement volumineux. Il y a donc cette fonction __autoload.

Quand la fonction __autoload est-elle appelée ?

Lorsque le mot-clé new est utilisé pour instancier un objet dans un fichier php, si la classe n'est pas définie dans ce fichier php, la fonction __autoload sera déclenchée. A ce moment, vous pourrez introduire la définition du. fichier php de classe, puis il peut être instancié avec succès. (Remarque : si l'objet à instancier a trouvé la définition de la classe dans ce fichier, la fonction __autoload ne sera pas déclenchée)

Comme les deux fichiers ci-dessus, exécutez php main.php
#Animal.php<?php
   class Animal{}?>
(1) Lors de l'exécution de new Animal(), on constate que la classe Animal n'est pas définie
#main.php<?php
  function __autoload($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }  $ani = new Animal();?>
(2) La fonction __autoload est déclenchée, ce qui introduit le fichier Animal.php ; (3) Instanciation réussie.

Bien, maintenant que vous avez compris le rôle de la fonction __autoload, jetons un œil au rôle de la fonction spl_autoload_register.
Le rôle de la fonction spl_autoload_register est de remplacer les paramètres de la fonction personnalisée par la fonction __autoload (remarque : lorsque __autoload et spl_autoload_register apparaissent dans le fichier en même temps, spl_autoload_register prévaudra)
Ensuite, en remplaçant main.php par le ce qui suit aura le même effet Fonction :

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