Heim Web-Frontend js-Tutorial Detaillierte Interpretation des automatischen Ladens von PHP und des Namespace

Detaillierte Interpretation des automatischen Ladens von PHP und des Namespace

Jun 23, 2018 pm 02:46 PM
php

Das automatische Laden von PHP bedeutet, dass wir beim Laden einer instanziierten Klasse nicht manuell „require“ schreiben müssen, um die Datei „class.php“ automatisch zu laden und zu importieren. In diesem Artikel wird hauptsächlich das automatische Laden von PHP vorgestellt und Benennung. Freunde, die es benötigen, können sich zunächst an

wenden.

„Was ist ein Namespace? Im Großen und Ganzen ist ein Namespace eine Möglichkeit, Dinge zu kapseln. In Betriebssystemen werden beispielsweise Verzeichnisse zum Gruppieren verwandter Dateien verwendet Die Rolle eines Namespace für Dateien in einem Verzeichnis. Beispielsweise kann die Datei foo.txt gleichzeitig in den Verzeichnissen /home/greg und /home/other vorhanden sein. Es können jedoch nicht zwei foo vorhanden sein. txt-Dateien im Verzeichnis. Wenn wir auf die foo.txt-Datei außerhalb des Verzeichnisses /home/greg zugreifen, müssen wir den Verzeichnisnamen und das Verzeichnistrennzeichen vor den Dateinamen setzen, um /home/greg/foo.txt zu erhalten Das Prinzip wird auf den Bereich der Programmierung angewendet, es ist das Konzept des Namespace. „

Das automatische Laden von PHP bedeutet, dass wir beim Laden einer instanziierten Klasse keine Anforderung manuell schreiben müssen, um die Datei class.php zu importieren , und das Programm hilft automatisch. Mit der Namespace-Spezifikation können wir das Laden und Aufrufen verschiedener Klassen in komplexen Systemen problemlos bewältigen.

1. Das Prinzip des automatischen Ladens und die Verwendung von __autoload

Das Prinzip des automatischen Ladens besteht darin, dass wir eine Klasse instanziieren, wenn PHP Wenn Sie diese Klasse nicht finden können, ruft sie automatisch die Methode __autoload($class_name) in dieser Datei auf und unser neuer Klassenname wird zum Parameter dieser Methode. Bei dieser Methode können wir also den entsprechenden Pfad der Klassendatei basierend auf den verschiedenen Beurteilungen und Unterteilungen anfordern. Wir benötigen einen neuen Klassennamen, um ein automatisches Laden zu erreichen.

Sehen wir uns zunächst den automatischen Aufruf von __autoload() an, zum Beispiel:

index.php

<?php 
$db = new Db();
Nach dem Login kopieren

Wenn wir die Db-Klasse nicht manuell importieren, wird das Programm Mai Es wurde ein Fehler gemeldet, der besagt, dass diese Klasse nicht gefunden werden konnte:

Schwerwiegender Fehler: Nicht erfasster Fehler: Klasse 'DB' nicht gefunden in D:webhellowebademo2017autoloadindex.php:2 Stack-Trace: #0 {main} geworfen in D:webhellowebademo2017autoloadindex.php in Zeile 2

Fügen wir also jetzt die Methode __autoload() hinzu und werfen einen Blick darauf:

$db = new DB();
function __autoload($className) {
 echo $className;
 exit();
}
Nach dem Login kopieren

Gemäß der Beschreibung des automatischen Lademechanismus oben wird dies der Fall sein Ausgabe: Db, was wir brauchen new Der Klassenname der Klasse. Daher können wir zu diesem Zeitpunkt die Klassenbibliotheksdatei nach Bedarf in der Methode __autoload() laden.

2. spl_autoload_register lädt automatisch

Wenn es sich um ein kleines Projekt handelt, können Sie __autoload() verwenden, um ein grundlegendes automatisches Laden zu erreichen. Wenn ein Projekt jedoch groß ist oder verschiedene automatische Ladevorgänge erforderlich sind, um Dateien mit unterschiedlichen Pfaden zu laden, ist __autoload zu diesem Zeitpunkt nutzlos, da in einem Projekt nur eine __autoload()-Funktion zulässig ist, da PHP keine Funktionen mit doppelten Namen zulässt . , was bedeutet, dass Sie nicht zwei __autoload()-Funktionsdateien deklarieren können, da sonst ein schwerwiegender Fehler gemeldet wird. Was zu tun? Machen Sie sich keine Sorgen, was auch immer Ihnen einfällt, der PHP-Meister hat bereits darüber nachgedacht. So wurde eine weitere großartige Funktion wie spl_autoload_register() geboren und ersetzte sie. Es arbeitet effizienter und ist flexibler.

Sehen wir uns zunächst an, wie man es verwendet. Fügen Sie den folgenden Code zu index.php hinzu.

<?php 
spl_autoload_register(function($className){
 if (is_file(&#39;./Lib/&#39; . $className . &#39;.php&#39;)) {
 require &#39;./Lib/&#39; . $className . &#39;.php&#39;;
 }
});
$db = new Db();
$db::test();
Nach dem Login kopieren

Fügen Sie den folgenden Code zur Datei LibDb.php hinzu:

<?php 
class Db
{
 public static function test()
 {
 echo &#39;Test&#39;;
 }
}
Nach dem Login kopieren

Nach dem Ausführen von index.php wechselt spl_autoload_register beim Aufruf von new Db() automatisch in das lib/-Verzeichnis, um es zu finden die entsprechende Db-.php-Datei und kann nach Erfolg $db::test(); ausführen. Wenn sich im Lib-Verzeichnis mehrere PHP-Klassendateien befinden, können diese ebenfalls direkt in index.php aufgerufen werden, ohne dass mehrere Dateien erforderlich sind.

Mit anderen Worten, spl_autoload_register kann mehrmals wiederverwendet werden. Dies behebt die Mängel von __autoload_register. Wenn eine Seite mehrere spl_autoload_register hat, erfolgt die Ausführung nacheinander wenn du es findest.

3. spl_autoload_register automatisches Laden und Namespace-Namespace

Bei sehr komplexen Systemen wird die Verzeichnisstruktur auch sehr komplex sein und der Standardbenennungsraum wird gelöst das Problem einer großen Anzahl von Dateien, Funktionen und Klassen mit doppelten Namen unter komplexen Pfaden. Autoloading ist heute der Eckpfeiler moderner PHP-Frameworks, und spl_autoload_register wird im Wesentlichen zum Implementieren des automatischen Ladens verwendet. Daher ist der Namespace spl_autoload_register + zum Mainstream geworden.

Gemäß der PSR-Spezifikationsreihe wurde die Benennung von Namespaces stark standardisiert, sodass der detaillierte Pfad anhand des Namespace ermittelt werden kann, um die Klassendatei zu finden.

Wir veranschaulichen am einfachsten Beispiel, wie komplexe Systeme automatisch Klassendateien laden.

Zuerst bereiten wir die Systemverzeichnisstruktur vor:

----/Lib  // 类目录
 --Db.php
 --Say.php
----autoload.php // 自动加载函数
----index.php // 首页
Nach dem Login kopieren

Das Obige ist ein grundlegendes Systemverzeichnis. Wir möchten Namespace und automatisches Laden verwenden, um Lib direkt im Homepage-Index aufzurufen .php Mehrere Klassen im Verzeichnis.

Wir bereiten zwei Spaltendateien vor:

Db.php

<?php 
namespace Lib;
class Db
{
 public function __construct()
 {
 //echo &#39;Hello Db&#39;;
 }
 public static function test()
 {
 echo &#39;Test&#39;;
 }
}
Say.php
<?php
namespace Lib;
class Say 
{
 public function __construct()
 {
 //echo &#39;Hello&#39;;
 }
 public function hello()
 {
 echo &#39;say hello&#39;;
 }
}
Nach dem Login kopieren

以上两个普通的类文件,添加了命名空间: namespace Lib; 表示该类文件属于Lib\目录名称下的,当然你可以随便取个不一样的名字来表示你的项目名称。

现在我们来看autoload.php:

<?php 
spl_autoload_register(function ($class) {
 $prefix = &#39;Lib\\&#39;;
 $base_dir = __DIR__ . &#39;/Lib/&#39;;
 // does the class use the namespace prefix?
 $len = strlen($prefix);
 if (strncmp($prefix, $class, $len) !== 0) {
 // no, move to the next registered autoloader
 return;
 }
 $relative_class = substr($class, $len);
 // 兼容Linux文件找。Windows 下(/ 和 \)是通用的
 $file = $base_dir . str_replace(&#39;\\&#39;, &#39;/&#39;, $relative_class) . &#39;.php&#39;;
 if (file_exists($file)) {
 require $file;
 }
});
Nach dem Login kopieren

以上代码使用函数 spl_autoload_register() 首先判断是否使用了命名空间,然后验证要调用的类文件是否存在,如果存在就 require 类文件。

好了,现在我们在首页index.php这样调用:

<?php 
use Lib\Db;
use Lib\Say;
require &#39;./autoload.php&#39;;
$db = new Db();
$db::test();
$say = new Say;
$say->hello();
Nach dem Login kopieren

我们只需使用一个require将autoload.php加载进来,使用 use 关键字将类文件路径变成绝对路径了,当然你也可以在调用类的时候把路径都写上,如: new Lib\Db(); ,但是涉及到多个类互相调用的时候就会很棘手,所以我们还是在文件开头就使用 use 把路径处理好。

接下来就直接调用Lib/目录下的各种类文件了,你可以在Lib/目录下放置多个类文件尝试下。

运行index.php看看是不是如您所愿。

结束语

该文简单介绍了自动加载以及命名空间的使用,实际开发中,我们很少去关注autoload自动加载的问题,因为大多数现代PHP框架都已经处理好了文件自动加载的问题。开发者只需关注业务代码,使用规范的命名空间就可以了。当然,如果你想自己开发个项目不依赖大型框架亦或者自己开发php框架,那你就得熟悉下autoload自动加载这个好东西了,毕竟它可以让我们“偷懒”,省事多了。

现代php里,我们经常使用 Composer 方式安装的组件,都可以通过autoload实现自动加载,所以还是一个“懒”字给我们带来了极好的开发效率。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

有关JsonObject中的key-value数据解析排序(详细教程)

在Thinkjs3中如何使用静态资源目录

如何实现单层json按照key字母顺序排序(详细教程)

Das obige ist der detaillierte Inhalt vonDetaillierte Interpretation des automatischen Ladens von PHP und des Namespace. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

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

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

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

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles