Explication détaillée du chargement automatique des classes en PHP

藏色散人
Libérer: 2023-04-09 18:16:02
avant
3394 Les gens l'ont consulté

Chargement automatique des cours en PHP

Avant, nous avons appris à travers le principe du chargement automatique de Composer, il profite en fait de la fonctionnalité de chargement automatique des classes en PHP.

Le chargement automatique des classes en PHP repose principalement sur les deux méthodes __autoload() et spl_autoload_register().

Aujourd'hui, nous examinerons brièvement l'utilisation de ces deux méthodes.

__autoload()

En tant que méthode magique sur le point d'être éliminée, il suffit de la comprendre. Si cette méthode est utilisée dans PHP7, un avertissement obsolète sera signalé et le système nous recommandera d'utiliser la méthode spl_autoload_register().

function __autoload($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
}

$autoA = new AutoA();
var_dump($autoA);
Copier après la connexion

Lorsque nous instancions la classe AutoA, le fichier actuel n'a pas cette classe, et il n'inclut ni n'exige d'autres fichiers. À ce moment, il entrera automatiquement dans la méthode magique __autoload(). Dans la méthode __autoload(), il suffit d'inclure le fichier où se trouve cette classe.

spl_autoload_register()

Cette méthode a actuellement remplacé la fonction de chargement automatique des classes par la méthode magique ci-dessus. C'est une méthode de la bibliothèque d'extensions spl. La bibliothèque d'extensions spl est désormais intégrée par défaut à PHP. Vous pouvez l'utiliser directement en toute confiance.

L'avantage de spl_autoload_register() par rapport à __autoload() est qu'il peut enregistrer un __autoload(), et implémenter et maintenir une file d'attente __autoload(). À l'origine, il ne pouvait y avoir qu'une seule méthode __autoload() dans un fichier, mais maintenant, vous avez une file d'attente.

De cette façon, vous n'avez pas besoin d'écrire tout le code de chargement dans une seule méthode __autoload(), mais vous pouvez utiliser plusieurs spl_autoload_register() pour charger chaque classe séparément.

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
});

$autoA = new AutoA();
var_dump($autoA);
Copier après la connexion

Référence : Étude approfondie des principes de Composer (2)

Utiliser include ou include_once

En chargement automatique, il suffit d'utiliser include , la classe ne sera pas chargée à plusieurs reprises.

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
    echo $name, PHP_EOL;
});

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoB = new AutoB();
var_dump($autoB);
Copier après la connexion

D'après le code, nous pouvons voir que $name n'est affiché qu'une seule fois lorsque la classe est instanciée plusieurs fois. Il n’y a donc pas lieu de s’inquiéter du problème du chargement répété des fichiers de classe. De plus, lors de l'utilisation de composer dans un grand framework, de nombreuses classes seront chargées et la méthode _once posera également des problèmes d'efficacité.

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:segmentfault.com
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!