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

小云云
Libérer: 2023-03-19 21:12:02
original
1678 Les gens l'ont consulté

Traditionnellement, en PHP, lorsqu'on veut utiliser un fichier de classe, on doit l'exiger ou l'inclure en tête du document : Cet article vous présente principalement les points de connaissances liés au chargement automatique (autoloading) de PHP fichiers et Pour une utilisation détaillée, les amis qui ont besoin de ces informations peuvent s'y référer. J'espère que cela pourra être utile à tout le monde.


<?php
require_once(&#39;../includes/functions.php&#39;);
require_once(&#39;../includes/database.php&#39;);
require_once(&#39;../includes/user.php&#39;);
...
Copier après la connexion

Mais une fois qu'il y a trop de documents à appeler, il faut écrire une ligne à chaque fois, ce qui n'a pas l'air joli. un moyen de créer du PHP. Qu'en est-il du chargement automatique des documents ?


<?php
function __autoload($class_name)
{
  require "./{$class_name}.php";
}
Copier après la connexion

Oui, vous pouvez utiliser la fonction magique de PHP __autoload(). L'exemple ci-dessus charge 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

Autrement dit, nous effectuons un certain traitement de cas du nom de fichier, puis vérifiez le fichier avant d'exiger s'il existe, sinon, affichez des informations personnalisées.

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 __autoload, 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'ait accepté à l'avance d'utiliser un seul __autoload, et que toute modification soit impliquée. La synchronisation des versions est gênante.

Principalement à cause de cela, la bonne nouvelle est que la fonction __autoload 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(&#39;...&#39;);
});
Copier après la connexion


//使用一个全局函数
function Custom()
{
  require_once(&#39;...&#39;);
}

spl_autoload_register(&#39;Custom&#39;);
Copier après la connexion


//使用一个class当中的static方法
class MyCustomAutoloader
{
  static public function myLoader($class_name)
  {
    require_once(&#39;...&#39;);    
  }
}

//传array进来,第一个是class名,第二个是方法名
spl_autoload_register([&#39;MyCustomAutoloader&#39;,&#39;myLoader&#39;]);
Copier après la connexion


//甚至也可以用在实例化的object上
class MyCustomAutoloader
{
  public function myLoader($class_name)
  {
  }
}

$object = new MyCustomAutoloader;
spl_autoload_register([$object,&#39;myLoader&#39;]);
Copier après la connexion

Il convient de mentionner qu'en utilisant le chargement automatique, qu'il s'agisse de __autoload() ou de spl_autoload_register(), par rapport à require ou include, l'avantage est que le mécanisme de chargement automatique est un chargement paresseux, c'est-à-dire qu'il ne vous appartient pas. les fichiers seront appelés pour vous dès son exécution, mais seuls ceux que vous utilisez, tels que 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, &#39;load&#39;], true, true);
}
Copier après la connexion

Recommandations associées :

Tutoriel Zend Framework : Explication détaillée de l'utilisation du chargement automatique

Le standard PSR-0 de PHP utilise l'espace de noms pour le chargement automatique

Tutoriel Zend Framework : Chargement automatique Utilisation Explication détaillée

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!