Was ändert sich mit PHP 5.3?

Sprachen  –  Kommentare

Gut zweieinhalb Jahre nach der Veröffentlichung von PHP 5.2.0 im November 2006 ist nun mit Version 5.3.0 die nächste Generation der nach Java, C und C++ populärsten Programmiersprache erschienen. In PHP 5.3 stecken aber mehr als zweieinhalb Jahre Entwicklungszeit, haben die PHP-Entwickler doch fast alle Neuerungen, die für PHP 6 gedacht waren, für diese Version vorgezogen. heise Developer stellt die wichtigsten vor.

Namensräume (englisch: Namespaces) sind ein Sprachmerkmal, das viele PHP-Entwickler lange Zeit vermisst haben. Derselbe Name (für eine Konstante, Klasse oder Funktion) lässt sich in unterschiedlichen Namensräumen ohne Konflikt verwenden. So kann man beispielsweise Namenskonflikte zwischen Framework- und eigenem Code vermeiden. Einen Namensraum deklariert man über das Schlüsselwort "namespace". Das muss die erste Anweisung in der Quelltextdatei sein. Alle nach dieser Anweisung deklarierten Konstanten, Klassen und Funktionieren sind dem Namensraum zugeordnet.

    example.php
<?php
namespace project;

const ANSWER = 42;
class SomeClass {}
function doSomething() {}
?>

In dem voranstehenden Beispiel (Datei example.php) deklariert man den Namensraum project. Dieser enthält je eine Konstante, Klasse und Funktion. Innerhalb des Namensraums project lässt sich auf diese Elemente über die lokalen Namen ANSWER, SomeClass und doSomething() zugreifen. Für den Zugriff auf diese Elemente von außerhalb des Namensraums gibt es die folgenden Optionen.

Inkludiert man die Datei example.php in einer anderen PHP-Quelltextdatei, so lässt sich über die vollständig qualifizierten Namen project\ANSWER, project\SomeClass und project\doSomething auf die im Namensraum project in der Datei example.php deklarierten Programmelemente zugreifen.

    <?php
require 'example.php';

print project\ANSWER;
$object = new project\SomeClass;
project\doSomething();
?>

Vollständig qualifizierte Klassennamen kann man mit dem Schlüsselwort use im lokalen Namensraum bekannt machen:

    <?php
require 'example.php';

use project\SomeClass;

$object = new SomeClass;
?>

Alternativ lassen sich vollständig qualifizierte Klassennamen über einen lokalen Alias verwenden:

    <?php
require 'example.php';

use project\SomeClass as Foo;

$object = new Foo;
?>

Der Name eines Namensraums kann das Namensraumtrennzeichen, das Backspace-Zeichen, enthalten. So lassen sich verschachtelte Namensräume abbilden:

    <?php
namespace project\package\subpackage;

class SomeClass {}
?>

Am Rande der php|tek-Konferenz im Mai 2009 in Chicago haben sich Entwickler einiger bekannter PHP-Bibliotheken beziehungsweise -Frameworks getroffen und mit einer Diskussion über Coding-Standards und Namensräume begonnen. Diese lässt sich unter php.net verfolgen und ist jedem Entwickler zu empfehlen, der seinen Code auf Namensräume umstellen möchte.

Kaum ein Sprachmerkmal wurde in der Geschichte von PHP so kontrovers diskutiert wie die Namensräume. Ursprünglich für PHP 5.0 geplant, dann zurückgezogen, halten sie nun in PHP 5.3 Einzug in die Sprache. Man mag sich über Punkte wie "zu wenig und zu spät" oder das Namensraum-Trennzeichen "\" streiten, sollte aber bei allem nicht die Vorteile vergessen.