Das Groß der Änderungen kam traditionsgemäß mit der ersten alpha-Version, aber trotzdem lohnt sich der Blick auf die alpha3, denn mit ihr kommen 2 “ganz nette” und eine interessante Syntaxerweiterungen (“Syntactic Sugar”) dazu. Aber fangen wir mit dem langweiligen Teil an: Diesmal fiel der “Removed”-Keule die unleidlichen Funktionalitäten rund um die Magic-Quotes zum Opfer. Die INI-Einstellungen magic_quotes_gpc, magic_quotes_runtime und magic_quotes_sybase entfallen ersatzlos, die Funktionen get_magic_quotes_gpc() und get_magic_quotes_runtime() liefern immer nur noch false und die Funktion set_magic_quotes_runtione() wirft von nun an ein E_CORE_ERROR. Ein hoch auf die Putzfrau.

Statische Methoden sind nun per “Ausdruck” aufrufbar.

<?php
MyClass::{$something->doSomething()}();

Ich steh dem etwas zwiegespalten gegenüber, denn im Grunde sehe ich keinen Einsatzfall und auf der anderen Seite provoziert es womöglich ziemlich hässliche Konstruktionen.

Es gibt nun “echte” Binärzahlen.

<?php
$int = 0b1100101;

Nachdem es die hexadezimale und oktale Notation nun schon seit … immer (?) gibt, find ich es verwunderlich, dass die Binärnotation so lange gebraucht hat.

<?php
class MyConstants {
    const FLAG1 = 0b001;
    const FLAG2 = 0b010;
    const FLAG3 = 0b100;
}
$myValue = 3; // = 0b011 = 0x3 = 03
// 0b11 & 0b10 = 0b10 != 0 ~= false
if ($myValue & MyConstants::FLAG2) {
    // FLAG2 set
}

Nun aber das echte Highlight: Die “Short Array Syntax”. Zugegeben, man spart nicht wirklich viel, aber es steigert meines Erachtens die Lesbarkeit enorm.

<?php
$array = [1,2,3];
$array = ['foo' => 123, 'bar' => 987];
$array = ['foo' => 123, 1, 2, 'bar' => 987];

Eigentlich tauscht man nur array(..) gegen [..]. Die Wahl auf [..] fiel vorallem wegen der Anlehnung an JSON und einiger anderer Sprachen, die [..] für Listen verwenden.

Ein Einsatzzweck wäre beispielsweise, um “named parameters” zu simulieren, wobei die neue Syntax die Lesbarkeit bei der Verwendnung verbessert.

<?php
$user = new User(['name'=>'Horst','id'=>123]);

Auch statische Arrays werden etwas nachvollziehbarer

<?php
foreach ([1,2,4] as $number) { /* do something */ }
if (in_array($value, ['foo','bar']) { /* do something */ }

Warum der Array-Initialisator in PHP unbedingt wie ein Funktionsaufruf aussehen musste, bleibt auch diesmal ein Geheimnis der Entwickler ;) Wenn man nun noch list() austauschen könnte …

Soviel bisher zu PHP5.4. Jetzt sieht es so aus, als wäre es das an “neuen, großen Features” gewesen und mir gehen damit auch direkt die Themen aus. Nun heißt es abwarten, wann die Final kommt und wie lange es diesmal dauern wird, bis sie sich ansatzweise durchsetzen kann. Traits sind ein ziemliches Killer-Feature und ich kann es kaum erwarten sie einzusetzen. Aber zum Beispiel mein Hoster setzt weiterhin (auch nach nun jahrelangem Nachfragen) auf 5.2, weswegen sich bei mir zunehmend die Meinung einstellt, dass Hoster keine Alternative mehr sind, wenn man denn irgendwie voran kommen möchte.