Schon ab der Version 5.3 von PHP werden nun endlich auch Namespaces mit ins Programm aufgenommen. Diese werden das Arbeiten mit großen Projekten wesentlich beeinflussen und hoffentlich erleichtern. Namespaces werden am Anfang jeder Datei deklariert und können selbstverständlich öfter vorkommen:
< ?php namespace Projektbezeichnung::Datenebene::DB; class Connection { /* ... */ } ?>
Diese Deklaration hat verschiedene Auswirkungen auf den Code. Allen Klassen, Funktionen und Konstanten wird der Namespacename vorangestellt. Im vorher genannten Beispiel würde die Klasse mit Projektbezeichnung::Datenebene::DB::Connection angesprochen werden.
Unqualifiezierte Klassenverweise ohne :: werden zur Laufzeit wie folgt behandelt: Zuerst wird die Klasse im aktuellen Namespace ohne einen Autoload-Versuch gesucht. Danach wird die Klasse im globalen Namensraum gesucht. Ebenfalls ohne den Versuch, diese mittels autoload() zu holen. Ist dies nicht geglückt, wird versucht, die Klassendefinition mittels autoload-Funktion zu ermitteln.
Unqualifizierte Funktionsverweise werden, bis auf die Autoloadfunktionalitäten, analog behandelt. (Bei Konstanten wird im aktuellen Namensraum und dann in den global definierten Konstanten gesucht.)
Das Importieren und Nutzen von Namespaces soll denkbar einfach sein:
< ?php require("Projekt/Datenlayer/Db/Connection.php"); use Projektbezeichnung::Datenebene::DB; use Projektbezeichnung::Datenebene::DB::Connection as DbConn; $objDb1 = new Projektbezeichnung::Datenebene::DB::Connection(); $objDb2 = new DB::Connection(); $objDb3 = new DbConn(); ?>
Geheime Quellen berichten, dass es wohl zu einer Funktionalität kommen kann, mit der man Namespacebereiche bequem einbinden könnte (Notation umstritten):
< ?php include Projekt::Datenanbindung::*; ?>