Explication détaillée des exemples de chargement automatique de fichiers PHP

jacklove
Libérer: 2023-04-01 22:14:02
original
1527 Les gens l'ont consulté

Cet article présente principalement les points de connaissances pertinents et l'utilisation détaillée du chargement automatique des fichiers PHP. Les amis qui en ont besoin peuvent s'y référer.

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(&#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, vous devez écrire une ligne à chaque fois, ce qui n'a pas l'air joli. 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 de PHP __autoload(). L'exemple ci-dessus charge automatiquement le fichier PHP dans le répertoire courant. Bien sûr, en pratique, on a plus tendance à l'utiliser ainsi :

<?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

, ce qui implique de faire un certain traitement de dossier sur le dossier nom, puis dans require Vérifiez si le fichier existe auparavant et affichez des informations personnalisées s'il n'existe pas.

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'accepte à l'avance d'utiliser un seul __autoload et que toute modification soit apportée.

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 que l'avantage d'utiliser le chargement automatique, qu'il s'agisse de __autoload() ou de spl_autoload_register(), par rapport à require ou include est que 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, &#39;load&#39;], true, true);
}
Copier après la connexion

Recommandations associées :

Explication détaillée des techniques PHP pour utiliser mb_strpos en PHP

Explication détaillée de la façon dont PHP utilise l'extension zlib pour obtenir une sortie de compression GZIP

Explication détaillée de la façon dont PHP implémente le memcache distribué pour configurer la synchronisation des sessions du cluster Web

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:
php
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