PHP 5: Mit Namespaces Kollisionen zwischen Klassennamen verhindern
Problem Sie nutzen in Ihrer Applikation diverse Bibliotheken oder Frameworks und wollen Konflikte zwischen eigenen Klassen und Framework-Klassen mit identischen Namen vermeiden. Sie möchten dabei aber nicht den in PHP häufig angewandten Kompromiss eingehen und den Klassennamen verkomplizieren (z.B. MeinProjekt_MeineTeilanwendung_Meine-Klasse). Lösung Durch die Verwendung von Namespaces, die ab PHP 5.3 zur Verfügung stehen, können Sie eine saubere Trennung der Namensräume erreichen, ohne den Klassennamen künstlich zu verkomplizieren. Das folgende Codebeispiel zeigt, wie das aussehen könnte: namespace net\php\pear\Date { class DateTime { public function __construct() { print __CLASS__ . “ created\n“; } } } namespace de\oreilly\phpckbk { class DateTime { public function __construct() { print __CLASS__ . “ created\n“; } } $oreillyDateTime = new DateTime(); use net\php\pear\Date; $pearDateTime = new Date\DateTime(); $phpDateTime = new \DateTime(); print_r($phpDateTime); } Wie Sie sehen, werden im gezeigten Codebeispiel drei Klassen mit identischem Namen (DateTime) verwendet. Wir selbst bewegen uns im Namensraum de\oreilly\phpckbk und haben dort die Klasse DateTime definiert. Diese kann also ohne weitere Namensraumangabe instantiiert werden. Durch Angeben des entsprechenden Namensraums können wir genauso einfach …