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

php中世界最好的语言
Libérer: 2023-03-26 19:48:01
original
1640 Les gens l'ont consulté

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');
...
Copier après la connexion

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";
}
Copier après la connexion

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");
    }
}
Copier après la connexion

, 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('...');
});
Copier après la connexion
//使用一个全局函数
function Custom()
{
  require_once('...');
}
spl_autoload_register('Custom');
Copier après la connexion
//使用一个class当中的static方法
class MyCustomAutoloader
{
  static public function myLoader($class_name)
  {
    require_once('...');    
  }
}
//传array进来,第一个是class名,第二个是方法名
spl_autoload_register(['MyCustomAutoloader','myLoader']);
Copier après la connexion
//甚至也可以用在实例化的object上
class MyCustomAutoloader
{
  public function myLoader($class_name)
  {
  }
}
$object = new MyCustomAutoloader;
spl_autoload_register([$object,'myLoader']);
Copier après la connexion

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);
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal