Heim  >  Artikel  >  PHP-Framework  >  So verstehen Sie das automatische Laden des ThinkPHP Loader

So verstehen Sie das automatische Laden des ThinkPHP Loader

WBOY
WBOYnach vorne
2021-12-20 14:06:381960Durchsuche

Dieser Artikel vermittelt Ihnen das relevante Wissen über das automatische Laden des Loaders in thinkphp. Er enthält hauptsächlich das relevante Wissen über das Laden von Composer.

So verstehen Sie das automatische Laden des ThinkPHP Loader 1. Automatisches Laden der Loader-Quellcodeanalyse

1-1 Lernziele

  • Zwei Möglichkeiten, Klassen automatisch zu laden

  • spl_autoload_register muss verwendet werden können

  • zum Implementieren des automatischen Ladens benutzerdefinierter Dateiklassen

  • 1-2 Composer-Laden

Bildbeschreibung hier einfügen So verstehen Sie das automatische Laden des ThinkPHP Loader Zuerst in die Loader-Klasse base.php laden und dann das Register aufrufen Verfahren.

Kommen Sie zu thinkphplibrarythinkLoader.php und es gibt eine Registermethode. In dieser Methode lernen wir zunächst den ersten Wissenspunkt spl_autoload_register() und sprechen über das vergangene und gegenwärtige Leben und die einfache Verwendung von spl_autoload_register .

So verstehen Sie das automatische Laden des ThinkPHP LoaderDer nächste Schritt ist der Wurzelpfad des Projekts und der Pfad des Komponisten.

Hier Bildbeschreibung einfügen

So verstehen Sie das automatische Laden des ThinkPHP LoaderAb hier wird die Composer-Datei geladen. Der Vorgang ist ebenfalls sehr einfach.

Bestimmen Sie, ob Composer ein Verzeichnis ist.

  • Bestimmen Sie, ob sich unter dem Pfad autoload_static.php befindet Datei

  • Führen Sie die Datei autoload_static.php ein

  • Beurteilen Sie Compos. Sind die Daten im Array in erStaticInit30742487e00917c888d89ba216f165b9 vorhanden? Gehen Sie zur Datei „vendorcomposerautoload_static.php“, um diese beiden Attribute anzuzeigen. Es wird geschätzt, dass einige Schüler hier herumlaufen: self::${$attr} = $composerClass::${. $attr} ;, das $attr hier sind die Daten von 'prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files', wobei der äußeren Ebene ein $-Zeichen hinzugefügt wird .
  • So können wir die entsprechenden Attributwerte direkt in der Klasse ComposerStaticInit30742487e00917c888d89ba216f165b9 abrufen, bei der es sich um die beiden Attributwerte im Bild oben handelt.

  • 1-3 Registrieren Sie den Namespace
  • Die Datei ist immer noch die Registrierungsmethode von thinkphplibrarythinkLoader.php
  • Hier werden zwei Befehlsräume registriert, nämlich think und traits. Dann geben Sie die Methode „addNamespace“ ein. Fügen Sie in der Methode „addNamespace“ den Psr4-Bereich hinzu sr4 und unter den beiden Attributen $ prefixDirsPsr4,

wird verwendet, um das Obige zu überprüfen und ein Breakpoint-Debugging durchzuführen. Wenn Sie diese Daten sehen, wird die gleiche Registrierungsmethode verwendet. So verstehen Sie das automatische Laden des ThinkPHP Loader

Bis jetzt ist die Namespace-Registrierung abgeschlossen. Schauen wir uns als nächstes an, was der psr4-Namespace ist.

So verstehen Sie das automatische Laden des ThinkPHP Loader

1-4 Was ist Psr4?

Unter psr versteht man einfach den Dateipfad und die relevanten Spezifikationen zum automatischen Laden der entsprechenden Klassen. Derzeit verwendet TP5.1 die psr4-Spezifikation. Die Klassen beziehen sich hier auf Klassen , Schnittstelle, Superklassenstruktur

So verstehen Sie das automatische Laden des ThinkPHP LoaderEine vollständige Klasse erfordert die folgende Struktur()*

Die folgenden Spezifikationen werden aus PHP-Dokumenten abgeleitet

Ein vollständiger Klassenname muss vorhanden sein ein Namespace der obersten Ebene, der als „Anbieter-Namespace“ bezeichnet wird;

Ein vollständiger Klassenname kann einen oder mehrere Unternamespaces haben;

  • Der Unterstrich in einem beliebigen Teil des vollständigen Klassennamens hat keine besondere Bedeutung.

  • Der vollständige Klassenname kann aus beliebigen Groß- und Kleinbuchstaben bestehen.

  • Das Folgende ist ein offizielles Beispiel. Wenn Sie diese PSR-Spezifikation verstehen können, versuchen Sie, sie zu verstehen.

  • 1-5 Laden der Klassenbibliothekszuordnungsdatei Frage, was ist hier los? Es gibt keine classmap.php-Datei. So verstehen Sie das automatische Laden des ThinkPHP Loader

    Beeilen Sie sich nicht, geraten Sie nicht in Panik, führen Sie zuerst PHP Think Optimize: Autoload aus, um die Datei herauszuholen.

    So verstehen Sie das automatische Laden des ThinkPHP Loader Schließlich erreichen Sie die Methode addClassMap. Bei dieser Methode weisen Sie einfach die Daten zu der Datei classmap.php zu $classMap ist einfach, es gibt keine andere Verwendung

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    1-6 Das Erweiterungsverzeichnis automatisch laden

    extend Dieses Verzeichnis wird von allen verwendet, die das TP-Framework verwendet haben In diesem Verzeichnis kann eine Bibliotheksdatei gespeichert werden. So verstehen Sie das automatische Laden des ThinkPHP Loader

    Wie Sie auf dem Bild unten sehen können, verwenden Sie zum Laden

    In der Methode weisen Sie nur den Erweiterungspfad dem Attribut $fallbackDirsPsr4 zu.

    So verstehen Sie das automatische Laden des ThinkPHP LoaderDies ist das Ende des Loader::register(); Dann werfen wir einen detaillierten Blick auf die interne Implementierung und praktische Fälle.

    Der obige Lesequellcode enthält vier Attribute. Lassen Sie uns sie kurz organisieren. 2. Beschreiben Sie kurz den Ladevorgang der Klasse. Fügen Sie hier eine Bildbeschreibung ein

    Als ich hier gerade mit dem Parsen des Quellcodes begonnen habe, gab es eine Funktion spl_autoload_register

    So verstehen Sie das automatische Laden des ThinkPHP LoaderWenn die zu verwendende Klasse nicht eingeführt wurde, wird diese Funktion ausgelöst, bevor PHP einen Fehler meldet, und der undefinierte Klassenname wird als übergeben ein Parameter und geht direkt hierher. Führen Sie die think\Loader::autoload-Methode aus

    Die erste entladene Klasse nach dem Haltepunkt ist thinkError

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Warum ist es thinkError! Sie können zu thinkphp/base.php zurückkehren und einen Blick darauf werfen. Die erste auszuführende Klasse ist Error

    Sie können einfach einen Test durchführen, den Error in Kaka ändern und Drucken Sie es aus. Die Klasse wechselt zu diesem Zeitpunkt zu Kaka. Zu diesem Zeitpunkt hat jeder ein gewisses Verständnis für den automatischen Lademechanismus dieser Klasse. Wenn die verwendete Klasse nicht eingeführt wurde, wird diese Klasse als Parameter an die Autoload-Methode von thinkphp/library/think/Loader.php übergeben. So verstehen Sie das automatische Laden des ThinkPHP Loader

    Kommen Sie hierher und schauen Sie sich die Autoload-Methode an

    Beginnen Sie zunächst mit der findFile-Methode und übergeben Sie die unbenannte Klasse an diese Methode. In der findFile-Methode wird sie direkt aus dem classMap-Attribut abgerufen . Geben Sie die von der thinkError-Klasse zugeordnete Datei direkt zurück

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Nachdem der vollständige Pfad der thinkError-Klasse an die Dateivariable von Autoload zurückgegeben wurde, wird der Fall der Win-Umgebung einmal beurteilt.

    So verstehen Sie das automatische Laden des ThinkPHP LoaderDann verwenden Sie einfach include, um die Datei einzuführen, bis sie zurückgegeben wird.

    Bis zu diesem Punkt erfolgt eine vollständige automatische Belastungsanalyse der Klasse.

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Obwohl es hier endet, muss ich noch das Attribut $classMap erwähnen. Dieses Attribut basiert auf der Datei classmap.php. Die Generierung dieser Datei erfordert auch die Ausführung des Befehls php think activate:autoload.

    Wie wird das Programm ausgeführt, wenn diese Datei nicht generiert wird?

    Alle vorherigen Prozesse sind gleich, nur findFile ist anders. Lassen Sie uns das kurz klären.

    Zu diesem Zeitpunkt wird der Code definitiv nicht durch classMap gehen

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Zuerst die thinkError-Datei abrufen

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Rufen Sie dann den Namespace über die beiden Attribute beim automatischen Laden von Composer ab und verbinden Sie dann die Datei thinkError.php

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Das zurückgegebene Endergebnis ist auch die Datei D:phpstudy_proWWWThinkPHPSourceCodeAnalysisthinkphplibrarythinkError.php.

    Der Code hier muss sorgfältig gelesen werden.

    Das automatische Laden von Klassen ist hier komplett vorbei. 3. Wie man das automatische Laden von Klassen mit benutzerdefinierten Dateien implementiert ein Fehler, also wie sollen wir ihn bedienen, damit wir direkt darauf zugreifen können!

    Hier Bildbeschreibung einfügen

    Zu diesem Zeitpunkt wird die Bedeutung des Quellcodes deutlich. Denken Sie daran, dass in der automatisch geladenen Registerfunktion das Erweiterungsverzeichnis geladen wurde

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Hier Bildbeschreibung einfügen

    Dieses I Habe ein Kaka-Verzeichnis hinzugefügt und direkt darauf zugegriffen

    So verstehen Sie das automatische Laden des ThinkPHP Loader

    Kein Problem, es kam direkt heraus. Alles ist in Ordnung. Lassen Sie uns nun über die Lademethode des Umfangs sprechen. Als ich über die Registrierung des Klassenbibliotheksverzeichnisses für das automatische Laden sprach, habe ich nur erklärt, dass ich nur den Pfad zum Attribut $fallbackDirsPsr4 gespeichert habe, ohne auf Details einzugehen. Der nächste Schritt besteht darin, diese zu erklären.

    So verstehen Sie das automatische Laden des ThinkPHP LoaderDie einzige Möglichkeit, den Quellcode zu lesen, besteht darin, ihn zu implementieren und dann anzuzeigen

    Hier Bildbeschreibung einfügen

    So verstehen Sie das automatische Laden des ThinkPHP LoaderSolange die definierte Klasse eingegeben wird, wird sie zum automatischen Laden automatisch geladen

    Ja Geben Sie auch die findFile-Methode ein

    So verstehen Sie das automatische Laden des ThinkPHP LoaderSie können diesen Code in der findFile-Methode sehen. Dieses Attribut wird dem Attribut $fallbackDirsPsr4 hinzugefügt, wenn das Erweiterungsverzeichnis automatisch geladen wird.

    So verstehen Sie das automatische Laden des ThinkPHP LoaderSehen Sie sich die Daten an, wenn Sie die Parameterklasse in findFile drucken.

    Sie können die testKaka-Klasse deutlich sehen

    Dann verwenden Sie __include_file, um die von uns definierte Datei direkt einzubindenD:phpstudy_proWWWThinkPHPSourceCodeAnalysiskakatestKaka.php.

    Wie realisiert die obige benutzerdefinierte Datei das automatische Laden von Klassen und ist auch die Lademethode von Extend

    So verstehen Sie das automatische Laden des ThinkPHP Loader (empfohlenes Lernen:

    thinkphp5

    )

    Das obige ist der detaillierte Inhalt vonSo verstehen Sie das automatische Laden des ThinkPHP Loader. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen