Maison  >  Article  >  développement back-end  >  Introduction au mécanisme de chargement automatique PHP - fonction spl_autoload_register(), chargement automatique des classes PHP

Introduction au mécanisme de chargement automatique PHP - fonction spl_autoload_register(), chargement automatique des classes PHP

angryTom
angryTomavant
2019-10-14 18:10:174773parcourir

* Les fonctions d'include et require sont les mêmes. La différence est que include ne générera un avertissement que lorsqu'une erreur se produit, tandis que require générera une erreur et terminera le script.

* La seule différence entre include_once et include est que include_once vérifiera si le fichier a été introduit, et si c'est le cas, il ne sera pas introduit à nouveau.

La fonction spl_autoload_register() est une méthode importante pour réaliser la fonction de chargement automatique de classes non définies. Le chargement dit automatique signifie que lorsque nous créons une nouvelle classe, nous devons d'abord inclure ou exiger le fichier de classe. S’il n’y a pas d’include ou require , une erreur sera signalée. Ensuite, nous devons écrire de nombreux fichiers include ou require dans l'en-tête du fichier, ce qui est très gênant

Afin de rendre une nouvelle classe normale lorsqu'il n'y a pas de classe include ou require, nous avons le concept de. chargement automatique, et c'est-à-dire qu'une nouvelle classe peut être nouvelle normalement sans inclure le fichier de classe à l'avance, de sorte que notre en-tête de fichier n'a pas besoin d'en contenir beaucoup d'inclusions (require). En fait, c'est une sorte d'encapsulation !

Les fonctions mentionnées ci-dessus peuvent être réalisées en utilisant la fonction spl_autoload_register. Jetons un coup d'œil au principe d'implémentation.

Les paramètres de cette fonction sont les suivants :

Le premier paramètre : autoload_function

Il s'agit d'un nom de fonction [méthode], qui peut être une chaîne ou un tableau (utilisé pour appeler des méthodes de classe). La fonction de cette fonction (méthode) est d'inclure (de demander) le fichier de classe qui a besoin de new, afin que le fichier ne soit pas trouvé lorsque new est utilisé. En fait, il encapsule les fonctions include et require de l’ensemble du projet.

Deuxième paramètre : throw

Ce paramètre définit si spl_autoload_register() lève une exception lorsque la fonction autoload_function ne peut pas être enregistrée avec succès.

Le troisième paramètre : prepend

Si vrai, spl_autoload_register() ajoutera la fonction en tête de la file d'attente au lieu de la queue.

Lorsque nous créons une nouvelle classe et que le fichier de classe n'est pas inclus, la méthode autoload_function sera exécutée

Regardons d'abord un exemple d'erreur : ++++++++++ + ++++++++++

<?php
//当我们直接new一个未包含class类文件时候会报错
$objDemo = new AutoloadClass();

Utiliser correctement la fonction spl_autoload_register()

Nous pouvons voir dans l'exemple suivant que lorsque new n'est pas inclus classe, la fonction avec le premier nom de fonction de paramètre spl_autoload_register sera exécutée. Un paramètre de cette fonction est le nom de classe qui nécessite un nouveau. La fonction de cette fonction est d'inclure cette classe (le nom de classe est cohérent avec le nom de fichier). , de sorte qu'il soit atteint Fonction de chargement automatique. C'est le principe, ce n'est pas très compliqué.

<?php
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
//文件autoloadDemo.php文件
spl_autoload_register(&#39;myAutoLoad&#39;, true, true);
function myAutoLoad($className){
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}

De plus, nous pouvons le changer en une fonction anonyme à implémenter :

<?php
 
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
spl_autoload_register(function ($className)
{
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}, true, true);
$objDemo = new AutoloadClass();

Pour plus de connaissances sur PHP, veuillez visiter le Site Web PHP chinois!

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer