WP Core Handbook> PHP-Codierungsstandards> Namenskonventionen schlägt Folgendes zum Benennen von Dateien mit Klassen vor:
Klassendateinamen sollten auf dem
class-
vorangestellten Klassennamen basieren und die Unterstriche im Klassennamen werden durch Bindestriche ersetzt. BeispielWP_Error
:class-wp-error.php
Während der Wortlaut des Abschnitts in erster Linie für den Kerngebrauch bestimmt ist, gilt der Codierungsstil insgesamt häufig (und sollte meiner Meinung nach) für WP-Code von Drittanbietern.
Da der Core jedoch keine Namespaces unterstützt (PHP 5.2, ugh), ist dies nicht der Fall.
Was ist der praktische Weg aus Sicht der Entwicklerfreundlichkeit? Unterstützung von Autoloadern?
Ich konnte mehrere alternative Wege sehen:
- Namespace insgesamt ignorieren
- einschließlich Namespace im Dateinamen
- Verwenden von Namespaces als Ordnerebenen
- Verwenden eines alternativen Namensschemas wie PSR
oop
coding-standards
Selten
quelle
quelle
Antworten:
Ignorieren Sie zunächst das
class-
Präfix. Dies beruht auf dem reinen prozeduralen Code-Ansatz von WordPress. Klassen werden als Container für prozeduralen Code verwendet, nicht für reale Objekte, und die meisten Dateien enthalten überhaupt keine Klassen oder Klassen und anderen Code zusammen. Es macht keinen Sinn, wenn alle Ihre Dateien nur eine Klasse und sonst nichts enthalten.Wenn Sie diesem Muster folgen würden, müssten Sie
interface-foo.php
und verwendentrait-bar.php
. Das sieht nicht nur lächerlich aus, es macht das automatische Laden schwieriger als nötig.Der einfachste Weg, Namespaces und Klassen- / Schnittstellen- / Merkmalsnamen zu trennen, besteht (meiner Erfahrung nach) darin, Verzeichnisnamen Namespaces und Dateinamen Klassennamen zuzuweisen. Dies macht es sehr einfach , die gewünschte Klasse zu einer bestimmten Dateistruktur in den Auto-Loader zur Karte: Just convert
\
zu/
, append.php
und die Datei laden.Dies macht es auch einfach, die Suchvorgänge zwischenzuspeichern: Für jedes Verzeichnis / Namespace können Sie alle vorhandenen Dateien abrufen, wenn dieses Verzeichnis zum ersten Mal angefordert wird, und für spätere Aufrufe können Sie diese Liste von Dateinamen wiederverwenden, ohne
file_exists()
jedes Mal danach zu fragen .quelle
Ich habe eine Klasse für diese Anforderung erstellt, die mit PSR-4 kompatibel ist und den Wordpress-Codierungsstandards entspricht.
Sie erreichen es hier: https://github.com/pablo-pacheco/wp-namespace-autoloader
Die Erklärung ist alles da, aber im Grunde ist es eine Komponistenabhängigkeit. Sie müssen es nur in Ihrem Projekt benötigen:
Und dann ruf die Klasse an
quelle
Ich gehe im Allgemeinen mit der zweiten Hälfte Ihrer Optionen:
Wenn Sie einen PSR-4-Autoloader mit Composer registrieren, können Sie sich an die WP-Namenskonventionen halten. Namespaces, die Ordnern zugeordnet sind, die Unterstriche enthalten können, mit Dateien, die wie die Klasse benannt sind und auch Unterstriche enthalten können. Mögen:
Wenn WP zu PHP 5.3+ übergeht (es muss irgendwann passieren, oder?!), Müssen die Richtlinien aktualisiert werden. Da PSR-0 bereits veraltet ist, sollte PSR-4 zumindest empfohlen werden, wenn dies nicht erforderlich ist.
quelle
Die Lösung von pablo-sg-pacheco hat bei mir funktioniert. Das automatische Laden basiert auf einem Komponisten, der jedoch mit den WordPress-Codierungsstandards kompatibel ist. Die URL für das Github-Repo lautet jedoch:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
und der Paketname lautet:
Schließlich müssen Sie Ihrer composer.json auch Folgendes hinzufügen, da das Paket auf packagist nicht verfügbar ist:
quelle