Maison >cadre php >PensezPHP >Comment comprendre le chargement automatique du Loader de ThinkPHP

Comment comprendre le chargement automatique du Loader de ThinkPHP

WBOY
WBOYavant
2021-12-20 14:06:382006parcourir

Cet article vous apporte les connaissances pertinentes sur le chargement automatique du chargeur dans thinkphp. Il comprend principalement les connaissances pertinentes sur le chargement de Composer. J'espère qu'il sera utile à tout le monde !

Comment comprendre le chargement automatique du Loader de ThinkPHP 1. Chargement automatique de l'analyse du code source du chargeur

1-1 Objectifs d'apprentissage

  • Deux façons de charger automatiquement les classes

  • spl_autoload_register doit pouvoir utiliser

  • pour implémenter le chargement automatique des classes de fichiers personnalisées

  • 1-2 Chargement du compositeur

Insérer la description de l'image ici Comment comprendre le chargement automatique du Loader de ThinkPHP Premier chargement dans la classe de chargement base.php, puis appelé le registre méthode.

Venez sur thinkphplibrarythinkLoader.php et il existe une méthode de registre. Dans cette méthode, nous apprenons d'abord le premier point de connaissance spl_autoload_register() et parlons de la vie passée et présente et de l'utilisation simple de spl_autoload_register. .

Comment comprendre le chargement automatique du Loader de ThinkPHPLa prochaine étape est le chemin racine du projet et le chemin du compositeur.

Insérer la description de l'image ici

Comment comprendre le chargement automatique du Loader de ThinkPHPÀ partir d'ici, vous chargez le fichier composer, le processus est également très simple

Déterminez si composer est un répertoire

  • Déterminez si autoload_static.php sous le chemin est un file

  • Introduire le fichier autoload_static.php

  • Renvoyer tous les retours du tableau de classes déclarées

  • Obtenir la dernière classe ComposerStaticInit30742487e00917c888d89ba216f165b9

  • Judge Compos Les données du tableau existent-elles dans erStaticInit30742487e00917c888d89ba216f165b9 Suivant Vous pouvez y aller ? au fichier suppliercomposerautoload_static.php pour voir ces deux attributs

  • Il y a un morceau de code ici. On estime que certains étudiants feront le tour ici self::${$attr} = $composerClass::${. $attr} ;, le $attr ici est les données de 'prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files', avec un signe $ ajouté à la couche externe .
Ainsi, nous pouvons obtenir directement les valeurs d'attribut correspondantes​​dans la classe ComposerStaticInit30742487e00917c888d89ba216f165b9, qui sont les deux valeurs d'attribut dans l'image ci-dessus.

Comment comprendre le chargement automatique du Loader de ThinkPHP

1-3 Enregistrez l'espace de noms Comment comprendre le chargement automatique du Loader de ThinkPHP

Le fichier est toujours la méthode d'enregistrement de thinkphplibrarythinkLoader.php

Deux espaces de commande sont enregistrés ici, à savoir think et traits. Ensuite, vous entrerez dans la méthode addNamespace

Comment comprendre le chargement automatique du Loader de ThinkPHPDans la méthode addNamespace, ajoutez l'espace Psr4

Ensuite, vous arriverez à la méthode addPsr4, qui enregistrera les deux espaces de noms dans la classe ComposerStaticInit1e269472f484e157e90227b420ffca7a. 4 et Parmi les deux attributs $ prefixDirsPsr4,

est utilisé pour vérifier ce qui précède et effectuer un débogage de point d'arrêt. Cela devrait être clair lorsque vous voyez ces données. Quant aux traits, la même méthode d'enregistrement est utilisée. Comment comprendre le chargement automatique du Loader de ThinkPHP

Jusqu'à présent, l'enregistrement de l'espace de noms est terminé. Ensuite, étudions ce qu'est l'espace de noms psr4.

Comment comprendre le chargement automatique du Loader de ThinkPHP

1-4 Qu'est-ce que Psr4

Comment comprendre le chargement automatique du Loader de ThinkPHPpsr est simplement compris comme le chemin du fichier et les spécifications pertinentes pour le chargement automatique des classes correspondantes. Actuellement, TP5.1 utilise la spécification psr4

Les classes ici font référence à la classe. , interface, structure de super classe

Une classe complète nécessite la structure suivante ()*

Les spécifications suivantes sont dérivées de documents PHPComment comprendre le chargement automatique du Loader de ThinkPHP

Un nom de classe complet doit avoir un espace de noms de niveau supérieur, appelé « espace de noms de fournisseur »

Un nom de classe complet peut avoir un ou plusieurs sous-espaces de noms

Un nom de classe complet doit avoir un nom de classe final ;
  • Le trait de soulignement dans n'importe quelle partie du nom complet de la classe n'a aucune signification particulière.

  • Le nom complet de la classe peut être composé de n'importe quelle lettre majuscule et minuscule.

  • Tous les noms de classe doivent être sensibles à la casse ;

  • Ce qui suit est un exemple officiel. Si vous pouvez comprendre cette spécification psr, essayez de la comprendre

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    1-5 Chargement du fichier de mappage de la bibliothèque de classes

    À ce stade, il y aura certainement un question, que se passe-t-il ici ? Il n'y a pas de fichier classmap.php.

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Ne vous précipitez pas, ne paniquez pas, exécutez d'abord php think optimise:autoload pour sortir le fichier

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Enfin, vous atteindrez la méthode addClassMap Dans cette méthode, vous attribuez simplement les données. du fichier classmap.php dans $classMap est juste, il n'y a pas d'autre utilisation

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    1-6 Charger automatiquement le répertoire d'extension

    extend Ce répertoire a été utilisé par tous ceux qui ont utilisé le framework TP Custom. les classes peuvent être stockées dans ce fichier de bibliothèque de répertoire.

    Comme vous pouvez le voir sur l'image ci-dessous, vous utilisez la méthode addAutoLoadDir pour charger

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Dans la méthode, vous attribuez uniquement le chemin d'extension à l'attribut $fallbackDirsPsr4.

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    C'est la fin de la partie Loader::register(); Ensuite, nous examinerons en profondeur l'implémentation interne et les cas pratiques.

    Il y a quatre attributs dans le code source de lecture ci-dessus. Organisons-les brièvement

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    2. Décrivez brièvement le processus de chargement de la classe

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Insérez une description d'image ici

    Quand je viens de commencer à analyser le code source ici, il y avait une fonction spl_autoload_register

    Lorsque la classe à utiliser n'a pas été introduite, cette fonction sera déclenchée avant que PHP ne signale une erreur, et le nom de classe non défini sera transmis comme un paramètre et ira directement ici Exécuter la méthode think\Loader::autoload

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    La première classe déchargée après le point d'arrêt est thinkError

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Pourquoi thinkError! Vous pouvez revenir à thinkphp/base.php et jeter un œil Une fois le chargement automatique terminé, la première classe à exécuter est Error

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Vous pouvez simplement faire un test, changer l'Erreur en Kaka, et. imprimez-le. La classe à ce moment-là devient Kaka. À ce stade, tout le monde a une certaine compréhension du mécanisme de chargement automatique de cette classe.

    Lorsque la classe utilisée n'a pas été introduite, cette classe sera passée en paramètre à la méthode autoload de thinkphp/library/think/Loader.php.

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Venez ici et jetez un œil à la méthode de chargement automatique

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Commencez par la méthode findFile et transmettez la classe sans nom dans cette méthode. Dans la méthode findFile, elle sera directement obtenue à partir de l'attribut classMap. .Renvoyer directement le fichier mappé par la classe thinkError

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Après avoir renvoyé le chemin complet de la classe thinkError à la variable file d'autoload, le cas de l'environnement win est jugé une fois.

    Ensuite, utilisez simplement include pour introduire le fichier jusqu'à son retour.

    Jusqu'ici, vous trouverez une analyse complète du chargement automatique de la classe.

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Bien que cela se termine ici, je dois quand même mentionner l'attribut $classMap. Cet attribut est basé sur le fichier classmap.php. La génération de ce fichier nécessite également l'exécution de la commande php think optimise:autoload.

    Comment le programme s'exécute-t-il lorsque ce fichier n'est pas généré !

    Tous les processus précédents sont les mêmes, seul findFile est différent. Trions-le brièvement.

    Le code ne passera certainement pas par classMap pour le moment

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Récupérez d'abord le fichier thinkError

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Ensuite, récupérez l'espace de noms via les deux attributs dans le chargement automatique de Composer, puis fusionnez le fichier thinkError.php

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Le résultat final renvoyé est également le fichier D:phpstudy_proWWWThinkPHPSourceCodeAnalysisthinkphplibrarythinkError.php.

    Le code ici doit être lu attentivement.

    Le chargement automatique des cours est complètement terminé ici.

    3. Comment implémenter le chargement automatique des classes avec des fichiers personnalisés

    Créez d'abord un dossier kaka

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Introduisez ensuite le fichier Kaka.php dans l'index du contrôleur pour un accès direct, cette classe rapportera certainement une erreur, alors que faire pour y accéder directement ?

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Insérer la description de l'image ici

    À ce moment, l'importance du code source est révélée. N'oubliez pas que dans la fonction de registre chargée automatiquement, le répertoire d'extension a été chargéComment comprendre le chargement automatique du Loader de ThinkPHP

    Insérer la description de l'image ici

    Ceci. j'ai ajouté un répertoire kaka et y ai accédé directementComment comprendre le chargement automatique du Loader de ThinkPHP

    Pas de problème, il est sorti directement. Tout va bien. Parlons maintenant de la méthode de chargement d'extend

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Quand j'ai parlé de l'enregistrement du répertoire de la bibliothèque de classes à chargement automatique, j'ai juste expliqué que j'avais uniquement enregistré le chemin de l'attribut $fallbackDirsPsr4 sans entrer dans les détails. La prochaine étape consiste à les expliquer.

    La seule façon de lire le code source est de l'implémenter puis de le visualiserComment comprendre le chargement automatique du Loader de ThinkPHP

    Insérer la description de l'image ici

    Tant que la classe définie est saisie, elle ira au chargement automatique pour un chargement automatiqueComment comprendre le chargement automatique du Loader de ThinkPHP

    Il le fera entrez également la méthode findFile

    Vous pouvez voir ce code dans la méthode findFile. Cet attribut vous est familier. Il est ajouté à l'attribut $fallbackDirsPsr4 lorsque le répertoire d'extension est automatiquement chargé.

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Regardez les données lors de l'impression de la classe de paramètres dans findFile

    Vous pouvez clairement voir la classe testKakaComment comprendre le chargement automatique du Loader de ThinkPHP

    Comment comprendre le chargement automatique du Loader de ThinkPHPÀ ce moment, imprimez le fichier renvoyé dans l'attribut $fallbackDirsPsr4

    Comment comprendre le chargement automatique du Loader de ThinkPHP

    Ensuite, utilisez __include_file pour inclure directementD:phpstudy_proWWWThinkPHPSourceCodeAnalysiskakatestKaka.php le fichier que nous avons défini.

    Comment le fichier personnalisé ci-dessus réalise-t-il le chargement automatique des classes, et c'est aussi la méthode de chargement d'extendComment comprendre le chargement automatique du Loader de ThinkPHP

    (apprentissage recommandé :

    thinkphp5

    )

    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