2016-08-01 20 views
2

Von Zeit zu Zeit, die ich zu sehen, halten verdoppelt Namensraum so etwas wie:
Namespace/Namespace/Subnamespace/PHP Namespace Konventionen - Verdoppelung Namespaces

Zum Beispiel neue Prestashop (1.7) verwendet diese Konvention
namespace PrestaShop\PrestaShop\Core;

Könnte jemand erklären mir Vorteile von dieser Art von Namespacing?

auch sagen einige Tutorials über Namensräume wie folgt aus:

namespace mynamespace/classname 
classs classname {} 

Was Vorteile sind? Ursache sehe ich nur Nachteile wie: kompliziertere Namespaces und mehr Typisierung.

sah auch dieses Q & A: PHP Namespace Questions
ich nur Nachteil sehen: anfälliger für Fehler, da es auf relativ Namespacing hängt

PS: Ich halte auf immer absolute Namensräume verwenden. Es ist weniger anfällig für Fehler in meinem Gefühl, erleuchte mich, wenn ich bitte falsch liege.

+0

Sie folgen [psr-4] (http://www.php-fig.org/psr/psr-4/). Es ist nichts falsch mit dem Namensraum selbst, aber ich kann sehen, wie es verwirrend sein kann. – Andrew

+0

@Andrew Ich habe eine Antwort geschrieben, die sich an die Linie von PSR-4 anlehnt, aber es scheint nichts zu geben, was diesen Subnamensraum erfordert. Ist das nur eine kreative Entscheidung? Kommt es von PSR-0? – nerdlyist

+0

@nerdlyist Ich nehme an, es ist die Entscheidung des YouTubers, und das ist das einzige, was ich tun kann, nehme ich an. – Andrew

Antwort

2

Wie erwähnt, ist dies für automatisches Laden und folgt PSR-4-Konventionen. Die Namenskonvention für Namespaces bleibt im Allgemeinen dem Ersteller überlassen. Das einzige erforderliche Stück ist der Namespace der obersten Ebene, aber es können viele Unter-Namespaces verwendet werden, falls gewünscht.

Zum Beispiel in composer.json der PrestaShop sie haben:

"autoload": { 
    "psr-4": { 
     "PrestaShop\\PrestaShop\\": "src/", 
     "PrestaShopBundle\\": "src/PrestaShopBundle/" 
    } 
} 

So ist der Namespace PrestaShop\PrestaShop\ Sie zu jeder Sache in src bekommen kann.

Im slim Rahmen (Router) sie haben:

"autoload": { 
    "psr-4": { 
     "Slim\\": "Slim" 
    } 
} 

So, daß man Sie nur Slim\Class den Namespace verwenden.

In einem meiner ersten Projekt habe ich so etwas wie:

"autoload": { 
    "psr-4": { 
     "App\\Models\\": "app_name/models", 
     "App\\Validators\\": "app_name/validators" 
     //And so on 
    } 
} 

Ich glaube nicht, das alles andere als überflüssig schadet am Ende.