(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Hier einige wichtige Definitionen für die Zwecke der Namensauflösungsregeln:
Dies ist ein Bezeichner ohne einen Namespaceseparator, z. B. Foo
Dies ist ein Bezeichner mit einem Namespaceseparator, z. B. Foo\Bar
Dies ist ein Bezeichner mit einem Namespaceseparator, der mit einem Namespaceseparator beginnt, z. B. \Foo\Bar
. Der Namespace namespace\Foo
ist ebenfalls ein vollständig qualifizierter Name.
Dies ist ein Bezeichner, der mit namespace
beginnt, wie etwa namespace\Foo\Bar
.
Namen werden gemäß den folgenden Regeln aufgelöst:
\A\B
wird z. B. zu A\B
aufgelöst. namespace
durch den aktuellen Namensraum ersetzt wurde. Taucht der Namen im globalen Geltungsbereich auf, wird das namespace\
-Präfix entfernt. Beispielsweise wird namespace\A
innerhalb des Namensraums X\Y
zu X\Y\A
aufgelöst. Derselbe Name im globalen Geltungsbereich wird zu A
aufgelöst. A\B\C
als C
importiert, wird der Name C\D\E
zu A\B\C\D\E
übersetzt. C\D\E
innerhalb des Namensraums A\B
zu A\B\C\D\E
aufgelöst. use A\B\C;
eine Verwendung wie etwa new C()
zum Namen A\B\C()
aufgelöst. Analog wird nach use function A\B\foo;
eine Verwendung wie etwa foo()
zum Namen A\B\foo
aufgelöst. new C()
innerhalb des Namensraums A\B
zum Namen A\B\C
aufgelöst. A\B
, wird im folgenden erläutert, wie der Aufruf einer Funktion foo()
aufgelöst wird: A\B\foo()
. foo()
im globalen Namensraum zu finden und aufzurufen. Beispiel #1 Illustration der Namensauflösung
<?php
namespace A;
use B\D, C\E as F;
// Funktionsaufrufe
foo(); // versucht zuerst die Funktion "foo" im Namespace "A" aufzurufen