Auswertung von PHP-Namespaces

11

Ich bin in der Pre-Release-Phase eines Open-Source-PHP-Projekts, von dem ich hoffe, dass es von anderen Entwicklern in ihren eigenen Projekten verwendet wird. Das Projekt unterstützt derzeit keine Namespaces und ich versuche zu prüfen, ob Namespaces oder die PEAR-Namenskonvention von Dir_Subdir_Class verwendet werden sollen, die ohne einige der Nachteile dieselben technischen Vorteile zu haben scheint. Um ehrlich zu sein, ist es keine einfache Wahl.

Einige Überlegungen zu Namespaces:

  • Eine der Möglichkeiten, mit denen mein Projekt versucht, sich durch die Bereitstellung einer einfacheren API als andere ähnliche Projekte zu differenzieren. Da Namespaces neu und auch komplizierter als die PEAR-Namenskonvention sind, wird die Verwendung meines Projekts in die Codebasis weniger einfach. Durch die Implementierung verliere ich eine gewisse Differenzierung in Bezug auf die Benutzerfreundlichkeit.
  • Obwohl ich einige Vorteile für Namespaces sehe, scheinen sie kein Problem zu lösen, das in einem modernen PHP-Produkt gelöst werden muss, das die PEAR-Namenskonvention verwendet. Namenskonflikte bei der Verwendung meines Projekts sollten minimal sein, wenn sie nicht vorhanden sind.
  • Dieser Artikel gibt mir eine Pause bei der Übernahme von Namespaces, da deren Implementierung weniger als hervorragend war.
  • Ich zögere auch, auf einen Zug zu springen, der vielleicht nirgendwo hingehen wird. Da Namespaces eine neue Funktion von PHP sind, bin ich noch nicht davon überzeugt, dass sie zum Standard werden.
  • Kompatibilität. Fast der gesamte PHP-Code, der jemals geschrieben wurde, verwendet keine Namespaces, da es sich um eine neue Funktion handelt. Andere Bibliotheken wären ohne eine Konvertierung nicht kompatibel.

Einige Punkte für die Verwendung von Namespaces:

  • Wahrnehmung. Wenn Namespaces zum Standard und zu einer Best Practice werden, könnte mein Projekt ohne sie schnell als unprofessionell und veraltet angesehen werden.
  • Wettbewerb. Während einige konkurrierende PHP-Projekte beginnen, Namespaces in ihren neuesten Versionen zu verwenden, müssen viele den Sprung noch schaffen. Wenn Sie dies jetzt tun, kann mein Projekt einen Vorsprung gegenüber anderen Projekten haben.
  • Zukünftige Arbeiten wären einfacher, wenn ich den Wechsel jetzt vor dem Börsengang des Projekts vornehmen würde und nicht danach, wo ich zwei Versionen davon für eine Weile unterstützen müsste.
  • Ich möchte Best Practices unterstützen. Wenn Namespaces zu Best Practices für PHP werden, sollte mein Projekt diese verwenden.

Nach allem, was ich sagen kann, müssen Sie den einen oder anderen Weg wählen; du kannst nicht beides machen. Gibt es Punkte, die ich nicht berücksichtigt habe? Gibt es objektive Anzeichen (bitte keine Flammenkriege), die darauf hindeuten, dass Namespaces zum professionellen Standard für PHP werden? Ich würde mich über Erkenntnisse oder Ressourcen freuen, die Sie gerne weitergeben würden, da ich bald eine Entscheidung treffen muss.

VirtuosiMedia
quelle

Antworten:

5

Zwei Anzeichen dafür, dass Namespaces in PHP erhalten bleiben:

  1. Das PEAR-Namensschema wurde zugunsten von Namespaces in PEAR2 aufgegeben .
  2. Eines der erklärten Ziele von Zend Framework 2.0 ist es, ein Beispiel für die Verwendung von PHP 5.3 zu sein , indem unter anderem Namespaces vollständig genutzt werden. Ich halte dies für ein starkes Indiz dafür, dass Zend sich voll und ganz den Namespaces verschrieben hat und sie weiterhin unterstützen und weiterentwickeln wird (hoffentlich zum Besseren).

Ich stimme Ihnen voll und ganz zu, dass die derzeitige Implementierung von Namespaces, gelinde gesagt, fehlt, aber Ihre Argumente gegen deren Verwendung sind nicht so solide. Namespaces sehen auch in ihrer jetzigen Form Folgendes vor:

  • Bessere Code-Organisation,
  • Vermeiden von Namenskollisionen,
  • Kontext für Klassen, Funktionen und Konstanten.

Beachten Sie, dass die meisten Argumente gegen PHP-Namespaces im Vergleich zu Implementierungen in anderen Sprachen stehen und nicht gegen deren tatsächliche Vorzüge als Feature.

Yannis
quelle
+1 für die Links. Könnten Sie die bessere Code-Organisation und die besseren Kontextpunkte erweitern? Es fällt mir ein bisschen schwer zu verstehen, wie es eine bessere Code-Organisation bietet. Es scheint, dass die meisten Projekte an der 1: 1-Klasse-zu-Datei-Struktur festhalten, die in logischen Verzeichnissen gruppiert ist, genau wie Sie es im PEAR-Namensschema verwenden würden. Sogar ZF2 scheint in den meisten Fällen die gleichen Verzeichnis- und Dateistrukturen zu verwenden, aber gerade jetzt mit Namespaces. Es ist anders, aber ich sehe nicht unbedingt, wie es besser oder besser organisiert ist als bekannte Verzeichnisse und Dateien.
VirtuosiMedia
Ich habe auch Probleme mit dem Kontextpunkt. Wenn überhaupt, scheinen Namespaces den Kontext zu entfernen, um einen prägnanteren Codierungsstil zu erhalten, anstatt Kontext hinzuzufügen. Wenn ich beispielsweise eine neue Klasse tief in einer Datei instanziiere, muss ich jetzt herausfinden, wo der Namespace deklariert wurde, um herauszufinden, um welche Klasse es sich handelt, anstatt ihn sofort anhand des Klassennamens erkennen zu lassen. Wenn mir nichts fehlt, scheinen Namespaces weniger ausführlich zu sein, aber auf Kosten der Klarheit.
VirtuosiMedia
@VirtuosiMedia Die PEAR und die alten Schemata ZF Namensgebung emulieren Namensräume, so dass meine drei Punkte sind etwas wahr auch für sie. Ich möchte darauf hinweisen, dass wenn diese Punkte in der aktuellen Implementierung von PHP-Namespaces zutreffen, ihre kleinen Snafus nicht ausreichen, um sie nicht zu verwenden. Mit einer besseren Code-Organisation meine ich meistens Dateien, die eine vernünftige und logische Struktur und Hierarchie für Ihre Klassen annehmen, was natürlich ohne Namespaces möglich ist. Namespaces (und Schemata, die sie emulieren ) sind jedoch eine Funktion, mit der Sie alle drei Punkte gleichzeitig erreichen können.
Yannis
Erwischt. Danke für die Klarstellung. Sehen Sie signifikante Vorteile für tatsächliche Namespaces gegenüber emulierten Namespaces?
VirtuosiMedia
1
@VirtuosiMedia Alle Punkte für die Verwendung von Namespaces, die Sie in der Frage angeben, sind gültig. Dazu möchte ich hinzufügen, dass PHP-Namespaces dazu beitragen, dass sich Ihr Code für Codierer mit unterschiedlichem Hintergrund etwas natürlicher anfühlt, was in einem großen Projekt von unschätzbarem Wert sein kann. Es gibt auch keinen Standard für emulierte Namespaces. Sicher, dass die meisten von ihnen ungefähr gleich sind, aber die Verwendung tatsächlicher Namespaces stellt sicher, dass alle das gleiche Schema verwenden. Übrigens gibt es da draußen einen Namespacer , mit dem Sie Ihren Code benennen können.
Yannis