Wenn Sie in Ihrem PHP-Training die Anfängerstufe überschritten haben, haben Sie von PSR-0 gehört-einem Autoloading-Standard, der Möglichkeiten definiert, wie sie automatisch PHP-Klassen in Ihren Code einbeziehen können, ohne Anweisungen wie Anforderung zu verwenden und einzuschließen.
PSR-0 befasst sich mit dem Namespace einer Klasse und erfasst ihren Standort auf der Festplatte von diesen Informationen. Zum Beispiel würde die Klasse ZendmailMessage zu /path/to/project/lib/vendor/zend/mail/message.php.
führenPSR-0 unterstützt auch Unterstriche in den Klassennamen als Alternative, um den Übergang von 5.2 und früher einfacher zu gestalten. Zend_mail_message würde auch zu /path/to/project/lib/vendor/zend/mail/message.php.
führenAls der Komponist aufgetaucht ist und die Welt der PHP -Paketmanagement im Sturm übernahm, änderten sich die Dinge. Aufgrund einiger seiner Regeln duplizierten Ordner oft dupliziert und wurden zu tief, als sie die PSR-0-Installationen über Komponisten betrachteten. Zum Beispiel endeten einige Ordnerstrukturen wie folgt:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
Das ist bestenfalls chaotisch, weil:
Die Verzeichnisse "SRC" und "Tests" müssen Anbieter- und Paketverzeichnisnamen enthalten. Dies ist ein Artefakt der PSR-0-Einhaltung.
Daher haben sich einige hochqualifizierte PHP-Entwickler zusammengetan und einen Vorschlag für einen neuen Standard zusammengestellt: PSR-4.
PSR-4 zielt darauf ab, bei Bedarf zu ergänzen und mit PSR-0 zu arbeiten, und ersetzen Sie es nicht vollständig. Es kann, muss es aber nicht. Das Hauptziel von PSR-4 ist es, die Überreste von PSR-0 und die vor 5.3 Tage vollständig zu entfernen und eine prägnantere Ordnerstruktur zu ermöglichen. Mit PSR-4 würde der obige Ordnerbaum so aussehen:
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
Das Upgrade von PSR-0 war keine Option
Weil PSR-0 keinen Fürblerpfad zwischen Teilen des Klassennamens
zulässt
Dies ist sehr wichtig-es bedeutet, dass die Implementierung von PSR-4, während es viel sauberere Pakete ermöglicht, weitaus komplizierter zu implementieren ist. Wir nennen PSR-4-Paket-orientierte Autoloading, da es die Sauberkeit der Packung vor Einfachheit bevorzugt.
Die vorgeschlagenen Ziele lauten wie folgt: Behalten Sie die PSR-0-Regel, dass alle Pakete mindestens zwei Namespace-Levels (Anbieter und Paket) enthalten müssen von Ordnern zwischen der Kombination aus Lieferantenverpackung und dem Rest des voll qualifizierten Klassennamens.
Dies bedeutet, dass wir unsere Klassen überall in den Paketcode einfügen könnten, wo es uns als Menschen sinnvoll ist, und sie trotzdem reibungslos in PHP verwenden, ohne alternative Ladetechniken zu schreiben oder auf manuelles Laden zu greifen.
Darüber hinaus wird ausdrücklich angibt Ein Fehler und ein Stoppen des Flusses bricht diese Kompatibilität aus. Wenn zusätzliche Informationen über den Fehler erforderlich sind, sollte man einen PSR-3-kompatiblen Logger oder andere willkürliche Mittel verwenden.
Wie in der Beispieldatei dargestellt, unter Verwendung des PSR-4-Autoloaders, um Klassen aus der folgenden Struktur zu laden:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
würde so aussehen:
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
wo rufe neue foobarquxquux an; würde versuchen, aus dem ersten registrierten Verzeichnis zu laden, während neuer Foobarquxquuxtest; würde versuchen, vom zweiten zu laden.
Dieses Beispiel zeigt auch die Verwendung mehrerer Ordner pro einzelner Namespace.
Es gibt keine Silberkugel im Autolading. Jeder Ansatz bringt einige Vor- und Nachteile mit sich-PSR-4 würde einfachere Ordnerstrukturen ermöglichen, verhindern jedoch, dass wir den genauen Weg einer Klasse nur durch Betrachtung des voll qualifizierten Namens kennen. PSR-0 hingegen ist chaotisch auf der Festplatte, unterstützt jedoch Entwickler, die in der Vergangenheit festsitzen (die unterstrichenen Nutzer) und hilft uns dabei, den Ort einer Klasse zu erkennen, indem wir nur ihren Namen betrachten.
Wie denkst du über PSR-4? Lassen Sie uns in den Kommentaren unten wissen oder Ihre Meinung in einer der vielen Debatten ausdrücken.
So oder so-es besteht kein Zweifel, dass paketorientiertes Autoloading hier bleibt. Wenn nicht formell als Standard akzeptiert, wird von Personen, die es brauchen, benutzerdefiniert. Es liegt an uns, sich der Diskussion anzuschließen und den Begriff genug zu verbessern, um diesen formellen Zustand zu erreichen.
Warum war es PSR-4 wurde eingeführt, als PSR-0 bereits vorhanden war? Die strenge Korrelation von PSR-0 zwischen Namespaces und Verzeichnisstruktur führte zu tief verschachtelten Verzeichnissen, die nicht immer praktisch oder effizient waren. PSR-4 liefert einen flexibleren Ansatz, mit dem Entwickler Namespaces in ein beliebiges Verzeichnis abbilden können, wodurch die Notwendigkeit eines tiefen Verzeichnisses verringert wird.
PSR-4 verbessert sich bei PSR-0, indem sie einen flexibleren Ansatz für das Autolading liefert. Es ermöglicht den Entwicklern, einen Teil des Namespace in jedem Verzeichnis abzubilden und die Notwendigkeit eines tiefen Verzeichnisses zu verringern. Dies erleichtert die Verwaltung und Navigation in der Verzeichnisstruktur des Projekts. Dies bedeutet, dass es zwar noch funktional ist, es jedoch nicht für die Verwendung in neuen Projekten empfohlen wird. PSR-4 ist der empfohlene Standard für das Autoloading in Php. . Der Rest des Namespace wird dann der Unterverzeichnisstruktur zugeordnet. Dies ermöglicht einen flexibleren und effizienteren Ansatz für das Autolading. Notwendigkeit eines tiefen Verzeichnisses und verbesserte Effizienz. Es ist auch der empfohlene Standard für Autoloading in PHP und macht es zu einer guten Wahl für neue Projekte. Zu psr-4 beinhaltet die Änderung der Art und Weise, wie Namespaces und Verzeichnisse zugeordnet werden. In PSR-4 kann ein Teil des Namespace jedem Verzeichnis zugeordnet werden, und der Rest des Namespace kann der Unterverzeichnisstruktur abgebildet werden. Dies erfordert möglicherweise die Umstrukturierung der Verzeichnisstruktur Ihres Projekts.
PSR-4 benötigt PHP 5.3 oder höher. Wenn Sie eine ältere Version von PHP verwenden, müssen Sie ein Upgrade für die Verwendung von PSR-4 verwenden. PHP wird sich wahrscheinlich weiterentwickeln, wobei neue Standards und Praktiken eingeführt werden, während sich die Sprache und ihr Ökosystem weiterentwickeln. Auf absehbare Zeit ist PSR-4 jedoch der empfohlene Standard für das Autolading in Php.
Das obige ist der detaillierte Inhalt vonSchlacht der Autoloader: PSR-0 gegen PSR-4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!