Maison > développement back-end > tutoriel php > 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
Libérer: 2023-04-07 15:44:02
avant
5011 Les gens l'ont consulté

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

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

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

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!

Étiquettes associées:
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