Ein Namespace ist ein Bereich, in dem Namen für sich gelten. Er verhindert, dass zwei gleichnamige Klassen aus verschiedenen Quellen kollidieren.
- Namespace
Ein benannter Bereich, in dem Bezeichner für sich gelten, sodass derselbe Name in einem anderen Bereich etwas anderes meinen darf.
Beispiel: „Der Namespace trennt die eigene Klasse Logger von der gleichnamigen aus der eingebundenen Bibliothek.“Auch: Namensraum.
Abgrenzung zum Gültigkeitsbereich: Der Gültigkeitsbereich entsteht beim Ausführen und ist zeitlich begrenzt. Der Namespace ist eine Ordnung im Quelltext und gilt unabhängig davon, was gerade läuft.
Wozu er gebraucht wird
Sobald fremder Code dazukommt, treffen Namen aufeinander. Jede zweite Bibliothek bringt eine Klasse namens Logger, Client oder Response mit. Ohne Trennung müsste eine davon umbenannt werden.
Der Namespace stellt den Namen in einen Zusammenhang. Aus Logger wird Hersteller\Paket\Logger, und damit ist eindeutig, welcher gemeint ist. Im Code wird dann meist einer davon als Kurzform eingeführt.
<!-- PHP: Namespace und Einbindung -->
namespace App\Support\Forms;
use Statamic\Facades\Entry;
use App\Airtable\Client as AirtableClient;Wie es in anderen Sprachen gelöst ist
PHP und C# haben Namespaces als eigenes Sprachmittel. JavaScript löst dasselbe über Module: Was eine Datei nicht ausdrücklich herausreicht, bleibt drinnen, und beim Einbinden darf ein anderer Name vergeben werden.
Der Ordner, in dem eine Datei liegt, entspricht dabei meist dem Namespace. In diesem Projekt heißt der Namespace einer Klasse unter app/Support/Forms folgerichtig App\Support\Forms.
Die Kurzform im Code
Vollständige Namen sind lang, deshalb wird am Kopf einer Datei festgelegt, welche Klasse unter welchem Kurznamen gemeint ist. Danach steht im Code nur noch der kurze Name.
Treffen zwei gleichnamige Klassen in derselben Datei zusammen, bekommt eine davon dabei einen abweichenden Kurznamen. Das ist der übliche Weg, und er erklärt die Zeilen am Dateianfang, die auf den ersten Blick überflüssig wirken.