Maison >développement back-end >tutoriel php >Explication détaillée du chargement automatique des fichiers PHP

Explication détaillée du chargement automatique des fichiers PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-19 10:42:101645parcourir

Cette fois je vous apporte une explication détaillée de l'utilisation du fichier PHP chargement automatique , quelles sont les précautions lors de l'utilisation du chargement automatique de fichier PHP, ce qui suit est un cas pratique, jetons un coup d'oeil.

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'on veut appeler If il y a trop de documents, vous devez écrire une ligne à la fois, ce qui n'a pas l'air bien. 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 autoload() de PHP. L'exemple ci-dessus consiste à charger 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");
    }
}

, c'est-à-dire que nous effectuons un certain traitement de cas du nom de fichier, puis vérifions si le fichier existe avant de l'exiger. S'il n'existe pas, l'affichage personnalisé affichera les informations.

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 de chargement automatique, 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 chargement automatique et de synchroniser les versions lorsque des modifications sont impliquées, ce qui est très gênant. .

Principalement à cause de cela, la bonne nouvelle est que cette fonction de chargement automatique 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'utilisation du chargement automatique, que ce soit autoload() ou spl_autoload_register(), présente des avantages par rapport à require ou include. Autrement dit, 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);
}

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article Pour plus de passionnant. Pour plus d'informations, veuillez faire attention au site Web chinois php Autres articles connexes !

Lecture recommandée :

Explication détaillée des étapes pour implémenter l'injection de dépendances à l'aide de la réflexion de classe PHP

Comment supprimer des fichiers dans un répertoire utilisant PHP unlink et rmdir Réaliser

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