Es ist zwar schon ein wenig her, aber es gibt seit dem [url="http://www.php.net/index.php#id2009-03-24-1"]24. März[/url] das [url="http://qa.php.net/"]erste Release Candidat[/url] von PHP in der Version 5.3. Das ist Grund genug mal wieder drüber zu schauen.

Am Besten lässt sich dies über die hauseigene [url="http://wiki.php.net/todo/php53"]ToDo[/url]-Liste erfassen. Als Erstes fiel mir auf, dass einige in einem [url="http://www.kingcrunch2000.de/blog/archives/86#more-86"]älteren Beitrag[/url] erwähnten features mehr oder weniger stillschweigend verschwunden sind. Um genau zu sein blieb aus dem genannten älteren Beitrag, der eigentlich nur kleineres Features auflistet, rein garnichts übrig. OK, alle Features wurden damals unter "Future Releases" gelistet -- diese Sektion existiert nun garnicht mehr. Sie tauchen allesamt auch (noch?) nicht in den Planungen für PHP6 auf. Schade eigentlich, einige hielt ich für sinnvolle Konzepte, andere zumindest überlegenswert [1].

Bei den "[url="http://www.kingcrunch2000.de/blog/archives/75"]größeren Entwicklungen[/url]" hingegen, sieht es allerdings gut aus. Namespaces wurden ebenso aufgenommen, wie [url="http://wiki.php.net/rfc/closures"]Closures[/url]Anonyme Funktionen. Ich halte zwar anonyme Klassen für mindestens ebenso wichtig, aber die Tendenz ist auch so erkennbar. Schade finde ich allerdings, dass es [url="http://wiki.php.net/rfc/traits"]Traits[/url] nicht in dieses Release geschafft hat. Der [url="http://www.stefan-marr.de/"]Author[/url] gibt sich aber zuversichtlich, dass sie es in ein [url="http://www.stefan-marr.de/archives/20-New-Traits-Patch-Ready-for-Testing.html"]späteres Release[/url] schaffen:
[quote]Finally, I managed to complete the changes for the traits patch. Since, PHP 5.3 already entered the release cycle and it is not sure whether there will be a PHP 5.4 with new language features, the new patch is written for the PHP6 codebase.[/quote]
Mir persönlich waren die Traits am Liebsten, weil es viel mehr Möglichkeiten liefert, als "nur" kürzere Klassennamen (Namespaces), oder anonyme Funktionen, die -- zwar im Vergleich sehr umständlich und einfach -- auch jetzt [url="http://de.php.net/manual/de/function.create-function.php"]bereits möglich[/url] sind. So sind zum Beispiel entsprechende Methoden für allgemeinere Konzepte (zB Konfiguration) sehr leicht zu "injezieren".
[php]trait Config {
private $_config = null;
public function setConfig ($config) {
$this->_config = $config;
}
public function getConfig () {
return $this->_config;
}
}

class Bla
use Config {
setConfig as protected;
getConfig as protected;
}
{
/* Body */
}[/php]Genau dieses Beispiel lässt sich nun noch auf weitere Arten von Klassen übertragen, zum Beispiel Logger. Und das sind jetzt nur die offensichtlichen Beispiele.

Letzten Endes gibt es (abgesehen von Namespace und Closures) natürlich auch sonst [url="http://cvs.php.net/viewvc.cgi/php-src/NEWS?view=markup&pathrev=PHP_5_3"]viele Änderungen[/url]. Eine [url="http://cvs.php.net/viewvc.cgi/php-src/UPGRADING?view=markup&pathrev=PHP_5_3"]Zusammenfassung[/url] soll also hier nicht fehlen, vielleicht geh ich auf ein paar Einzelheiten später noch mal ein.

Am Ende bleibt die Trauer nach den Traits und die Hoffnung, dass man sie später nicht vergisst. Und natürlich die Frage, wann man (nach dem Release) gefahrlos auf die neue Version umsteigen kann. Einerseits gibt es traditionell überall Kinderkrankheiten, andererseits sind hier auch wieder die Hoster in der Pflicht, die sich ähnlich traditionell etwas schwer tun.

In dem Sinne
Bye

[1] Die ursprünglichen "Future Releases"-Sektion findet sich jetzt übrigens im [url="http://wiki.php.net/todo/backlog"]Backlog[/url]