Wenn Sie in Ihrem PHP-Training an der Anfängerstufe vorbeigegangen sind, 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 Erfordernisse zu verwenden und einzuschließen.
.psr-0 befasst sich mit dem Namespace einer Klasse und erfasst ihren Standort auf der Festplatte aus dieser Information. Beispielsweise würde die Klasse \ zend \ mail \ meldung zu /path/to/project/lib/vendor/zend/mail/message.php.php.
führenpsr-0 unterstützt auch Unterstriche in den Klassennamen als Alternative, um den Übergang von 5.2 und früher einfacher zu machen. Zend_mail_message würde auch zu /path/to/project/lib/vendor/zend/mail/message.php.php.php.php.php.php.php.
KomponistVerkäufer/ perversor_name/ package_name/ src/ Perversor_name/ Package_name/ ClassName.php # vendor_name \ package_name \ className Tests/ Perversor_name/ Package_name/ Classnametest.php # vendor_name \ package_name \ classnametest
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\ClassNameTestDas ist bestenfalls chaotisch, weil:
Die Verzeichnisse "SRC" und "Tests" müssen Anbieter- und Paketverzeichnisnamen enthalten. Dies ist ein Artefakt der PSR-0-Konformität.Daher haben sich einige hochqualifizierte PHP-Entwickler zusammengetan und einen Vorschlag für einen neuen Standard zusammengestellt: PSR-4.
psr-4
Verkäufer/ perversor_name/ package_name/ src/ ClassName.php # vendor_name \ package_name \ className Tests/ Classnametest.php # vendor_name \ package_name \ classnametest
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\ClassNameTestDas Upgrade von PSR-0 war keine Option
Weil PSR-0 keinen Verdenke zwischen Teilen des Klassennamenszulä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, weil es vor Einfachheit die Paketreinheit begünstigt.
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, sicher, dass die Kombination aus Lieferantenverpackung an einen beliebigen Ordner zuordnen kann und einen Infix der Ordner zwischen dem Kombination aus dem Lieferanten und dem Rest des vollqualifizierten Klassennamens zulassen.
Dies bedeutet, dass wir unsere Klassen überall in den Paketcode einfügen könnten, in dem 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 gibt der Entwurf ausdrücklich an, dass ein PSR-4-Autoloader niemals Ausnahmen werfen oder Fehler aufwerfen sollte, weil mehrere Autoloader möglicherweise registriert werden. Wenn man eine Klassen nicht lädt, sollten andere die Chance dazu erhalten-einen Fehler zu werfen und die Flussbrichts diese Kompatibilität zu stoppen. 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:
/path/to/packages/foo-bar/ src/ Baz.php # foo \ bar \ baz Qux/ Quux.php # foo \ bar \ qux \ quux Tests/ BAZTEST.PHP # FOO \ BAR \ BAZTEST Qux/ QuUxtest.php # foo \ bar \ qux \ quuxtest
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\ClassNameTestwürde so aussehen:
php // den Loader instanziieren $ lader = new \ Beispiel \ psr4autoloaderClass; // Registrieren Sie den Autoloader $ lader-> register (); // Registrieren Sie die Basisverzeichnisse für das Namespace -Präfix $ lader-> addnameSpace ('foo \ bar', '/path/to/pakete/foo-bar/src'); $ lader-> addnamespace ('foo \ bar', '/path/to/pakete/foo-bar/tests');
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\ClassNameTestwo rufe \ foo \ bar \ qux \ quux; würde versuchen, aus dem ersten registrierten Verzeichnis zu laden, während neu \ foo \ bar \ qux \ quUxtest; würde versuchen, vom zweiten zu laden.
Dieses Beispiel zeigt auch die Verwendung mehrerer Ordner pro einzelner Namespace.
Abschluss
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.
häufig gestellte Fragen zu PSR-0 und PSR-4 Autoloading
Kann ich im selben Projekt sowohl PSR-0 als auch PSR-4 im selben Projekt im selben Projekt im selben Projekt verwenden. Es ist jedoch wichtig zu beachten, dass sie nicht verwendet werden sollten, um dieselben Klassen zu automatisieren. Die Verwendung beider Standards kann in großen Projekten von Vorteil sein, bei denen ein Legacy-Code dem PSR-0-Standard folgt, während neuerer Code dem PSR-4-Standard folgt.
Ist psr-0 veraltet?
Wie funktioniert Autoloading in PSR-4?
Was sind die Vorteile der Verwendung von PSR-4?
Wie kann ich von PSR-0 zu PSR-4 migrieren? 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 erfordert PHP 5.3 oder höher. Wenn Sie eine ältere Version von PHP verwenden, müssen Sie upgraden, um PSR-4 zu verwenden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3