


Detaillierte Einführung in das Prinzip des automatischen Ladens von PHP
Apropos automatisches Laden von PHP: Viele Schüler denken vielleicht an die automatischen Ladefunktionen verschiedener Frameworks, die PSR0- und PSR4-Prinzipien in der PHP-Spezifikation, die automatische Ladefunktion von Composer usw. Alle bieten großen Komfort für unsere Entwicklung.
Was sind also die Ursachen und Folgen des automatischen Ladens von PHP? Was sind die internen Prinzipien von PHP? Als nächstes werde ich basierend auf meinem eigenen Verständnis analysieren und zusammenfassen:
Warum gibt es automatisches Laden?
Um die Verwaltung zu erleichtern, schreiben wir bei der objektorientierten PHP-Programmierung (OO) eine Klasse in eine separate Datei, wenn wir sie dann in der Klasse verwenden möchten A Die Funktion von Klasse B erfordert das Laden von Klasse B in Klasse A. Ursprünglich haben wir solche Anforderungen durch die Syntax „require“ und „include“ implementiert. Die Ergebnisse dieser beiden Syntaxen sind im Wesentlichen gleich. Es gibt einige Unterschiede im Ausführungsprozess, die hier nicht erläutert werden. Zum Beispiel:
//文件 B.php <?php class B{ public function echo_info(){ echo "我是class B中的方法执行结果"; } } ?> //文件 A.php <?php require 'b.php';//include 'b.php'; class A{ public function test(){ $b_object = new B(); $b_object->echo_info(); } } $a_object = new A(); $a_oject->test(); ?> 命令行输入:#php a.php 输出: “我是class B中的方法执行结果“
Daher implementiert PHP5 die automatische Ladefunktion (Autoload) von Klassen. Diese Funktion wurde ursprünglich durch eine magische Methode __autoload() in PHP implementiert. Später implementierte die PHP-Erweiterung SPL (Standard PHP Library) einen leistungsfähigeren automatischen Lademechanismus.
php original automatisches Laden
Lassen Sie uns zunächst die Methode __autoload() vorstellen. Wenn Sie das Beispiel gerade noch verwenden, können Sie mit __autoload() die folgenden Änderungen vornehmen:
//文件 B.php 不做修改 //文件 A.php <?php class A{ public function test(){ $b_object = new B(); $b_object->echo_info(); } } function __autoload($classname){ require $classname.'.php';//include 'b.php'; } $a_object = new A(); $a_oject->test(); ?> 命令行输入:#php a.php 输出: “我是class B中的方法执行结果“
Wir haben der Datei A eine Funktion hinzugefügt: __autoload() und nach dem Ausführen die entsprechende Einführungsmethode in die Funktion geschrieben Es wurde das gleiche Ergebnis erzielt, es wurde kein Fehler gemeldet. Wir müssen klarstellen, dass die Funktion __autoload() automatisch ausgeführt wird, wenn die Klasse nicht gefunden wird. Diese Funktion ist jedoch nicht intern in PHP definiert. Diese Funktion muss vom Entwickler selbst definiert und die interne Logik geschrieben werden. PHP ist nur für die automatische Ausführung des Aufrufs verantwortlich. Und beim Aufruf wird automatisch der Name der zu ladenden Klasse als Parameter übergeben.
Mit der Funktion __autoload() ist ersichtlich, dass wir, wenn wir jetzt 100 weitere Dateien einführen müssen, nur eine Regel festlegen und eine Funktion schreiben müssen. Dies ist eine große Verbesserung gegenüber der direkten Verwendung von require/inlude, es gibt jedoch auch neue Probleme. In einem Projekt können wir nur eine __autoload()-Funktion schreiben. Wenn das Projekt relativ groß ist, werden zum Laden jeder Datei dieselben Regeln verwendet . Offensichtlich ist es unrealistisch, dann müssen wir möglicherweise eine komplexe Regellogik in __autoload() schreiben, um den Anforderungen beim Laden verschiedener Dateien gerecht zu werden. Dadurch wird auch die Funktion __autoload() komplex und aufgebläht, was ihre Wartung und Verwaltung erschwert.
Als Ergebnis entstand der automatische Lademechanismus von SPL (Standard PHP Library Standard PHP Library).
Automatisches Laden von SPL
Lassen Sie uns zunächst klarstellen, wann PHP ein Objekt instanziiert (tatsächlich implementiert). Schnittstelle verwendet Klassenkonstanten oder statische Variablen in der Klasse. Dies ist der Fall, wenn statische Methoden in der Klasse aufgerufen werden. Zunächst wird geprüft, ob die Klasse (oder Schnittstelle) im System vorhanden ist. Wenn sie nicht vorhanden ist, wird sie überprüft Ich werde versuchen, den Autoload-Mechanismus zum Laden der Klasse zu verwenden. Der Hauptausführungsprozess des Autoload-Mechanismus ist:
1. Überprüfen Sie, ob der globale Variablenfunktionszeiger autoload_func NULL ist > 2. Wenn autoload_func==NULL, prüfen Sie, ob das System die Funktion __autoload() definiert. Wenn sie definiert ist, führen Sie sie aus und geben Sie das Ladeergebnis zurück. Wenn es nicht definiert ist, wird ein Fehler gemeldet und beendet. 3 Wenn autoload_func nicht gleich NULL ist, wird die Funktion, auf die autoload_func verweist, direkt ausgeführt prüft nicht, ob die Funktion __autoload() definiert ist. Wenn Sie den automatischen Ladevorgang von PHP verstehen, können Sie erkennen, dass PHP tatsächlich zwei Methoden zum Implementieren des automatischen Lademechanismus bereitstellt: Eine, die wir zuvor erwähnt haben, ist die Verwendung des vom Benutzer definierten __autoload( )-Funktion wird normalerweise im PHP-Quellprogramm implementiert; die andere besteht darin, eine Funktion zu entwerfen und den autoload_func-Zeiger darauf zu verweisen, was normalerweise in der PHP-Erweiterung unter Verwendung der C-Sprache implementiert wird, also des SPL-Autoload-Mechanismus. Wenn beide Methoden implementiert sind, das heißt, autoload_func ist nicht gleich NULL, führt das Programm nur die zweite Methode aus und die Funktion __autoload() wird nicht ausgeführt. Sehen wir uns zunächst ein Beispiel für das automatische Laden von SPL an:
B.php文件不变 A.php <?php class A{ public function test(){ $b_object = new B(); $b_object->echo_info(); } } function __autoload($classname){ require $classname.'.php';//include 'b.php'; } function my_autoload($classname){ require $classname.'.php';//include 'b.php'; echo 'my_autoload '; } spl_autoload_register('my_autoload'); $a_object = new A(); $a_object->test(); 结果:my_autoload 我是class B中的方法执行结果 ?>
Nehmen wir zunächst das kleine Beispiel, wenn Sie spl_autoload_register(' ändern. my_autoload') bis spl_autoload_register() Kann Klasse B geladen werden, ohne Parameter hinzuzufügen? Die Antwort lautet: JA. Warum?
因为SPL扩展内部自己定义了一个自动加载函数 spl_autoload(),实现了自动加载的功能,如果我们不定义自己的自动加载函数,并且程序里写了 spl_autoload_register()(如果不传参数,必须是第一次执行才会有效)或者 spl_autoload_register(’spl_autoload’),那么autoload_func 指针就会指向内部函数 spl_autoload()。程序执行的时候如果找不到相应类就会执行该自动加载函数。
那么,SPL 是怎么实现autoload_func 指针指向不同的函数呢?
原来,在SPL内部定义了 一个函数 spl_autoload_call() 和 一个全局变量autoload_functions。autoload_functions本质上是一个HashTable,不过我们可以将其简单的看作一个链表,链表中的每一个元素都是一个函数指针,指向一个具有自动加载类功能的函数。
spl_autoload_call()的作用就是按顺序遍历 autoload_functions,使得autoload_func指向每个自动加载函数,如果加载成功就停止,如果不成功就继续遍历下个自动加载函数,直到加载成功或者遍历完所有的函数。
那么,autoload_functions 这个列表是谁来维护的呢?就是 spl_autoload_register() 这个函数。我们说的自动加载函数的注册,其实就是通过spl_autoload_register()把自动加载函数加入到 autoload_functions 列表。
到此为止,整个自动加载的流程就是分析结束了。
相关SPL自动加载函数: spl_autoload_functions() //打印autoload_functions列表 spl_autoload_unregister() //注销自动加载函数
以上便是php自动加载原理的全部介绍,想了解更多相关内容请访问PHP中文网:PHP视频教程
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das Prinzip des automatischen Ladens von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
