Maison  >  Article  >  développement back-end  >  Explication détaillée du chargement automatique des classes en PHP

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

藏色散人
藏色散人avant
2021-02-15 09:13:163417parcourir

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);

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);

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);

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer