PHP6

Vor einigen Tagen sind einige PHP-Entwickler in Paris zusammengekommen, um die Entwicklung von PHP6 zu besprechen. Das Ergebnis dieser Besprechung ist hier zu finden. Ich versuche hier mal meinen Senf zu einigen Punkten, die mir besonders aufgefallen sind, abzugeben.

Unicode Unterstützung

gehört sicherlich zu den wichtigsten Neuerungen. Seltsam sind allerdings die recht grossen Geschwindigkeitseinbussen, die durch das Aktivieren von Unicode auftreten. PHP Anwendungen sollen dadurch um 25% und einzelne Stringfunktionen bis zu 300% langsamer werden. Dass Unicodeimplementierungen nicht so langsam sein müssen, zeigt Python. Python 2.0 war kaum langsamer als die Versionen davor.

Cleanup

register_globals, magic_quotes, safe_mode, register_long_arrays zusammen mit einigen weiteren halb- oder nie richtig funktionierenden Altlasten fliegen raus und das ist gut so.

PECL

XMLReader und XMLWriter zusammen mit einigen weiteren Extensions werden in die Sprache integriert. Das ist nett.

Engine

PHP wird um ein goto-Konstrukt erweitert. Armselig ist das. Ich empfehle jedem die Diskussion zu dieser tollen Innovation in der internals-Mailingliste nachzulesen.

Es wird wohl doch ifsetor() oder ?: eingeführt. Sehr praktisch, ich mag den ?:-Operator.

Named Parameters werden jedoch mit der Begründung It also makes for messier code nicht eingeführt. Um diese absurde Entscheidung verstehen zu können, sollte man die entsprechenden Threads der internals-Mailingliste lesen. Die meisten "Core-Developer" wussten bzw. wissen nicht, was named parameters sind, und handeln hier einfach nach dem Prinzip "was der Bauer nicht kennt, das frißt er nicht".

Inkonsistentenzen in der Reihenfolge der Argumente vieler Funktionen, wie in_array() und array_search(), werden nicht beseitigt. WTF!?

OOP

Es sieht so aus, dass die Vererbung mit statischen Methoden und Eigneschaften klar kommen wird. Siehe dazu den Bug. Mit dieser Erweiterung ist es nun endlich möglich in PHP Frameworks zu entwickeln, die diesen Namen verdienen. Einige Design Patterns, wie Factory, Singleton etc. können nun richtig, d.h. ohne Rückgriffe auf hässliche Java-Idiome, implementiert werden.

PHP soll nun endlich namespaces bekommen. Diese Erweiterung wird bestimmt von vielen Marketingdruiden gefeiert. Sie werden auf jeder Konferenz noch lauter schreien, dass PHP jetzt aber wirklich im Enterprise angekommen ist. Nüchtern betrachtet, bekommt PHP mit namespaces das, was Perl, Python und Ruby schon seit Jahren haben. Und ob die PHP-Entwickler eine schnelle namespaces-Implementation in der näheren Zukunft hinbekommen, ist sehr zweifelhaft.

Sonstiges

APC wird in die Sprache integriert, bleibt aber aus by default. sehr nett. Teile des Hardened PHP patches werden übernommen.

Fazit

Alles in allem betrachtet, kann man von PHP6 nicht als grossem Wurf sprechen. Die "Core-Developer" zeigten auch diesmal, dass sie nicht den Mut zu wirklichen Innovationen und konsequenten Entscheidungen haben. Offensichtlich fehlt auch das Können (siehe Unicode, namespaces). Sie haben einige Altlasten entfernt, konnten sich aber nicht dazu durchringen das unsägliche API-Chaos konsequent zu beseitigen.

In Sachen Sicherheit haben Sie aufs Neue nur an Symptomen rumgedoktort, dieses und jenes rausgeschmissen, manches aus dem Hardened PHP patch übernommen: also die alte Flickschusterei weiterhin fleissig betrieben.

Wirklich interessante Spracherweiterungen, wie Delegates, Closuren, Blöcke, Lambda-Funktionen, taint mode, Metaprogrammierung, Monaden, Continuations etc., wird PHP auch weiterhin nicht haben. Die meisten dieser Features wurden bewusst nicht in den Betracht gezogen, damit die typischen PHP-Programmierer nicht überfordert werden. Der zweite Grund für die Enthaltsamkeit der "Core-Developer" ist schlicht die eigene Inkompetenz und Ignoranz, denn die meisten kennen ausser C und Java vielleicht etwas (veraltetes) Perl.

Ich glaube, dass die Hoster nicht wirklich begeistert sein werden, dass PHP plötzlich um ein Viertel langsamer sein wird, andererseits werden sich diese über die Integration von APC freuen.

Abschliessend lässt sich sagen, dass PHP6 immer noch nicht das können wird, was die Konkurrenz (Python, Ruby, Perl) schon seit Jahren kann.