Namespace-Schlüsselwort und __NAMESPACE__-Konstante
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
PHP unterstützt zwei Arten des abstrakten Zugriffs auf Elemente innerhalb eines
Namespaces, die magische Konstante __NAMESPACE__
und das
Schlüsselwort namespace
.
Der Wert von __NAMESPACE__
ist ein String, der den Namen
des aktuellen Namespace beinhaltet. In globalem Code ohne Namespaces beinhaltet dies
einen leeren String.
Beispiel #1 __NAMESPACE__-Beispiel, Code mit Namespace
<?php
namespace MyProject;
echo '"', __NAMESPACE__, '"'; // gibt "MyProject" aus
?>
Beispiel #2 __NAMESPACE__-Beispiel, globaler Code
<?php
echo '"', __NAMESPACE__, '"'; // gibt "" aus
?>
__NAMESPACE__
ist nützlich, um dynamische
Namen zu konstruieren, zum Beispiel:
Beispiel #3 __NAMESPACE__ zur dynamischen Namenszusammensetzung verwenden
<?php
namespace MyProject;
function get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new $a;
}
?>
Das Schlüsselwort namespace
kann verwendet werden, um
explizit ein Element des aktuellen Namespaces oder eines untergeordneten
Namespaces anzufordern. Es ist das äquivalent der Namespaces zum
self
-Operator für Klassen.
Beispiel #4 Der namespace-Operator, innerhalb eines Namespace
<?php
namespace MyProject;
use blah\blah as mine; // siehe "Namespaces verwenden: Aliase/Importieren"
blah\mine(); // ruft die Funktion MyProject\blah\mine() auf
namespace\blah\mine(); // ruft die Funktion MyProject\blah\mine() auf
namespace\func(); // ruft die Function MyProject\func() auf
namespace\sub\func(); // ruft die Function MyProject\sub\func() auf
namespace\cname::method(); // ruft die statische Methode "method" der Klasse MyProject\cname auf
$a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse MyProject\sub\cname
$b = namespace\CONSTANT; // weist den Wert der Konstante MyProject\CONSTANT $b zu
?>
Beispiel #5 Der namespace-Operator, in globalem Code
<?php
namespace\func(); // ruft die Function func() auf
namespace\sub\func(); // ruft die Function sub\func() auf
namespace\cname::method(); // ruft die statische Methode "method" der Klasse cname auf
$a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse sub\cname
$b = namespace\CONSTANT; // weist den Wert der Konstante CONSTANT $b zu
?>