Ein Namespace kann genutzt werden, indem dessen Datei, in welchem er deklariert ist, inkludiert wird. Dann wird der Namespace unter myNamespace
wie deklariert verfügbar und wird der Funktion vorangestellt. Namespaces lasse sich nicht nur in einfacher Ebene deklarieren, sondern Sie können Subnamespaces von Namespaces deklarieren. Mitunter kann dadurch der Name für den Namespace recht lang werden. Dieser lässt sich kürzen, indem man mit use ... as
dem Namespace ein Alias zuweist, wie auch dies im folgenden Beispiel gezeigt wird:
1 2 3 4 5 6 |
<?php require_once ('bib.php'); myNamespace\unsereFunktion(); use myNamespace as mN; mN\unsereFunktion(); ?> |
Einzig und allein Klassen können mit dem use ... as
-Konstrukt direkt adressiert werden. Dies funktioniert, indem der Namespace wie oben gezeigt in der Datei bib.php
deklariert wird:
1 2 3 4 5 6 7 8 |
<?php namespace myNamespace; class UnsereKlasse { public function __construct() { } } ?> |
Dann lässt sich diese Klasse direkt referenzieren und innerhalb des Hauptprogrammes müssen Sie keinen Namespace-Alias angeben:
1 2 3 4 |
<?php use myNamespace\UnsereKlasse; $x = new UnsereKlasse(); ?> |
Befindet man sich in einem Namespace, so lassen sich andere danebenstehende Namespaces nur über eine absolute Pfadangabe aufrufen. Beispielsweise referenziert das folgende Programm eine Funktion in einem anderen Namespace:
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace myNamespace; function andereFunktion() { } namespace mySecondNamespace; function unsereFunktion() { \myNamespace\andereFunktion(); } ?> |
Den im vorherigen Abschnitt deklarierten Namespace second
, welcher im Namespace first
eingebettet ist, lässt sich ganz ähnlich ansprechen:
1 2 3 4 |
<?php require_once ('bib.php'); first\second\unsereFunktion(); ?> |
Wenn sich der aktuelle Programmcode in einem Namespace befindet, dann lässt sich mit einem Backslash (\
) der Wurzelnamespace ansprechen, in welchem alle PHP-Standardfunktionen deklariert sind, zum Beispiel:
1 2 3 4 5 6 7 |
<?php namespace myNamespace; function unsereFunktion() { echo(\date()); } ?> |
Wenn allerdings eine Funktion oder Konstante in dem aktuellen Namespace nicht deklariert ist, dann wird automatisch in den Wurzelnamespace gesprungen. Dies gilt allerdings nicht für Klassen.
Eine magische Konstante __NAMESPACE__
ist immer definiert. Befindet man sich in dem Wurzel-Namespace, so ist diese Konstante leer. Ansonsten befindet sich der Name des Namespaces, in welchem das Programm aktuell ist, in dieser Konstante.