Das sind die Neuerungen bei PHP 5.4
Große Kompatibilitätsschwierigkeiten sind mit PHP 5.4 glücklicherweise nicht zu erwarten, dafür kleinere Verbesserungen und neue nützliche Funktionen.

Der Sprung von PHP 5.3 auf PHP 5.4 ist nicht bahnbrechend. Einige alte Zöpfe wie der Safe-Modus, seit Jahren sowieso nicht mehr verwendet, wurden endgültig abgeschnitten. Daneben gab es diverse Performance-Optimierungen und kleinere Verbesserungen. Ein umfangreicher Schnitt beispielsweise bei den ...
Der Sprung von PHP 5.3 auf PHP 5.4 ist nicht bahnbrechend. Einige alte Zöpfe wie der Safe-Modus, seit Jahren sowieso nicht mehr verwendet, wurden endgültig abgeschnitten. Daneben gab es diverse Performance-Optimierungen und kleinere Verbesserungen. Ein umfangreicher Schnitt beispielsweise bei den teils kruden und inkonsistenten Methodennamen und -parametern unterblieb allerdings.Als Entwickler hat man so beim Suchen im Array- oder String-Bereich immer wieder das Gefühl, die Stecknadel im Heuhaufen zu suchen. Entweder man schaut in die Dokumentation oder verlegt sich aufs Raten.Natürlich würde eine Neustrukturierung der Namen die Migration erschweren und die Abwärtskompatibilität der meisten Skripte unmöglich machen. Deswegen ist er für Version 5.4 auch nicht sinnvoll und war auch nie beabsichtigt. Die Neuerungen gibt es teilweise im Bereich Objektorientierung, teils in Form nützlicher Ergänzungen zu häufig eingesetzten Funktionen wie Arrays und anderen Datentypen.
Json
Unter dem Begriff Json, Javascript Object Notation, ist die Kurzschreibweise von Arrays in Javascript bekannt. Sie findet sich auch in PHP mit den Methoden Json_encode() und Json_decode(), die jeweils für die Umwandlung verantwortlich sind. In PHP 5.4 wurde allerdings noch mehr getan: Die Json-Kurzschreibweise ist nun auch direkt in PHP möglich, um Arrays zu definieren. Sie heißt Short Array Syntax und sieht so aus:
$a = [1, 'Zwei', 0.3];
var_dump($a);
Dabei dienen die eckigen Klammern als Indikator für den Array. Darin folgen dann die einzelnen Datenwerte. In diesem Beispiel sind das verschiedene Datentypen, Zahl, String und Float, wie man auch nach der Ausgabe per var_dump() erkennen kann. Selbstverständlich benötigen Sie zum Datenaustausch mit Javascript immer noch die Methoden Json_encode() und Json_decode(), allerdings erlauben die kurzen Arrays immerhin dieselbe Schreibweise.
echo Json_encode($a);
Auf dieselbe Art sind auch verschachtelte Arrays möglich. Mit => lässt sich außerdem eine Name/Wert-Kombination definieren. Die folgende Zeile besteht aus einem Array, der wiederum an den Indexpositionen 1 und 2 jeweils einen anderen Array besitzt.
$a = [1, ['Zwei', 'Drei'], ['name'
=> 0.3]];
Der ersten der beiden untergeordneten Arrays besteht aus zwei Strings (an den numerischen Indizes 0 und 1), der zweite aus dem Index name mit dem Wert 0,3. Bei Indizes sind Strings und Zahlen als Namen möglich, bei Werten alle Arten von Datentypen, also auch Objekte und so weiter.
Traits
Die wichtigste Neuerung im Bereich Objektorientierung ist nicht die manchmal geforderte Mehrfachvererbung, dafür aber ein Konzept, das teilweise ähnliche Funktionen übernehmen kann: die so genannten Traits.

"Trait" heißt wörtlich Charakterzug oder Eigenschaft. Für eine Klasse können Sie per Trait Verhaltensweisen definieren, die beispielsweise dazu dienen, Überprüfungsarbeiten zu erledigen. Der Sinn kann darin bestehen, ein Verhalten nur einmal zu implementieren und dann in verschiedenen Klassen zu verhindern. Das Kernziel hier ist also die Vermeidung von Redundanzen.Ein Trait wird mit dem Schlüsselwort trait definiert und enthält Methoden. Diese können wiederum auch direkt auf Methoden der vererbten Klasse zugreifen. Im vorliegenden Beispiel greift die Trait-Methode doSomething() auf die gleichnamige Methode der Basisklasse zu und verarbeitet die Rückgabe, ergänzt sie um eigene Informationen und gibt sie aus.Statt der reinen Ausgabe wäre hier in der Praxis beispielsweise ein Ergebnisfilter möglich. Eingesetzt wird der Trait über das Schlüsselwort use.
<?php
class Basis {
public function doSomething() {
return 'Klasse';
}
}
trait MyTrait {
public function doSomething() {
$result = parent::doSomething();
echo $result . '<br/>Trait';
}
}
class MyClass extends Basis {
use MyTrait;
}
$object = new MyClass();
$object->doSomething();
?>
Wenn die Methode im Trait genauso heißt wie die in der Basisklasse, von der geerbt wird, wird die Trait-Methode aufgerufen. Würde in der aufgerufenen Klasse allerdings noch eine gleichnamige Methode deklariert, so würde allerdings diese die Methode im Trait überschreiben. Mit der neuen Hilfsfunktion trait_exists() können Sie feststellen, ob ein Trait vorhanden ist.
Kleinere OOP-Verbesserungen
Im Bereich Objektorientierung gibt es noch weitere kleinere Verbesserungen. So lässt sich mittlerweile eine Methode direkt im Objekt-Konstruktor aufrufen. Das heißt, wenn Sie das Objekt mit new initialisieren, können Sie direkt einen Methodenaufruf anhängen:
<?php
class My Class {
public function getOutput() {
return 'Ausgabe';
}
}
echo (new MyClass())->getOutput();
?>
Wichtig ist nur, dass die Instanziierung in runden Klammern erfolgt. Ebenfalls Webentwicklungüberarbeitet wurden die Methodenaufrufe für Klassen. Hier ist es mittlerweile möglich, auch einen Direktaufruf von Methoden mit der Syntax Class::{expr}() durchzuführen.
<?php
class MyClass {
public function getOutput() {
return 'Ausgabe<br/>';
}
}
$method = 'getOutput';
echo (new MyClass)->$method();
echo MyClass::getOutput();
echo MyClass::$method();
?>
Für die direkten Aufrufe mit Klassennamen erscheint eine Benachrichtigung, dass die Methode nicht als statisch definiert ist. Das können Sie mit dem Schlüsselwort static ändern.
Bereinigungen
Beachtenswert bei neuen Versionen ist natürlich immer die Abwärtskompatibilität. Dafür ist das Abschneiden alter Zöpfe besonders interessant. Hier ist vor allem der ominöse Safe-Modus zu nennen, der allerdings schon seit einigen Jahren kaum mehr eingesetzt wird (außer bei Hostern aus der Steinzeit).Und auch zwei weitere veraltete Konfigurationseinstellungen aus der php.ini wurden nun gestrichen: Magic Quotes, die magischen SQL-Injection-Verhinderer, die aber nicht wirklich helfen, sowie die Einstellung register_globals. Und auch bei der Fehlerbehandlung hat sich etwas getan: E_STRICT wurde nun logisch in E_ALL integriert, nachdem es bisher ein unabhängiges Fehler-Level war.<?= ist nun auch verfügbar, wenn die Konfigurationseinstellung short_open_tag auf false steht. Damit kann man die direkte Ausgabe quasi als Standard begrüßen und in die eigenen Templates einbauen. Kleinere Performance-Verbesserungen gibt es natürlich an verschiedenen Stellen, unter anderem wurde der @-Operator beschleunigt. Seine eigentliche Aufgabe ist es, Fehler zu unterdrücken.Häufig eingesetzt wird er beim Zugriff auf Dateien. Der Array $GLOBALS wird in PHP 5.4 nun erst initialisiert, wenn er gebraucht wird. Wer also darauf verzichtet, kann der Performance etwas auf die Sprünge helfen. Zu den kleinen neuen Funktionen gehören native Binärzahlen mit der folgenden Schreibweise:
$b = 0b011010;
echo $b
Die Zahl im Beispiel ergibt übrigens 26. Praktisch ist die Array-Dereferenzierung. Dabei wird direkt auf die Array-Rückgabe einer Funktion oder Methode zugegriffen und der entsprechende Index angesprochen. Das folgende Skript liefert beispielsweise den Wert mit dem Index name1:
<?php
class MyClass {
public function getArray() {
return array('name1' => 'wert1',
'name2' => 'wert2');
}
}
$object = new MyClass();
echo $object->getArray()['name1'];
?>
Der Datentyp callable für Parameter in Funktionen und Methoden wurde hinzugefügt. callable bedeutet, dass der übergebene Parameter ein aufrufbares Element wie ein Funktionsname oder ein Array mit Methodennamen und so weiter ist.Praktisch für das Datei-Handling ist, dass die Session-Funktion von PHP nun auch den Upload-Fortschritt von Dateien protokolliert und so eine Fortschrittsüberwachung erlaubt. Neben den funktionalen Verbesserungen wurde bei PHP im CLI-Modus, also per Kommandozeile, auch ein kleiner Webserver integriert, der für Testszenarien verwendet werden kann.
Fazit
Die Verbesserungen in PHP 5.4 sind mit Augenmaß durchgeführt und teilweise hilfreich. Ob man allerdings bei einer guten Softwarearchitektur wirklich Traits benötigt, sei dahingestellt, aber: Es gibt sie, und wer sie einsetzen möchte, kann das unproblematisch machen. Die Migration selbst ist recht einfach realisierbar, wenn man von einer anderen, halbwegs aktuellen PHP-Version kommt. Ist die eigene Anwendung jedoch sehr alt, dann ist es egal, ob man auf PHP 5.3 oder 5.4 wechselt: Der Aufwand ist dann in beiden Fällen recht hoch.