Die Entwicklung von PHP 5.4 im Überblick | heise online

Die Entwicklung von PHP 5.4 im Überblick

Mit der Veröffentlichung von PHP 5.4.0 ist nach zweieinhalb Jahren ein weitreichendes Update für die verbreitete Skriptsprache erschienen. Obwohl die Versionsnummer nur marginal angepasst wurde, flossen viele Funktionen aus dem ursprünglich geplanten Major-Release mit in die Entwicklung ein.

vorlesen Druckansicht 18 Kommentare lesen
Lesezeit: 9 Min.
Von
  • David Soria Parra
Inhaltsverzeichnis

Mit der Veröffentlichung von PHP 5.4.0 ist nach zweieinhalb Jahren ein weitreichendes Update für die verbreitete Skriptsprache erschienen. Obwohl die Versionsnummer nur marginal angepasst wurde, flossen viele Funktionen aus dem ursprünglich geplanten Major-Release mit in die Entwicklung ein.

Ursprünglich wollte man nach PHP 5.3 an der Entwicklung von PHP 6 arbeiten. Aufgrund technischer Schwierigkeiten und einer kaum wartbaren Codebasis verwarf man unter anderem den geplanten Support für Unicode-Strings und entschied sich zunächst für die Weiterführung der Reihe 5.x, und gegen eine neue Major-Version. Immerhin: Ein Großteil der für PHP 6 vorgesehen Features floss in PHP 5.4 mit ein.

Die jetzt vorgestellte Version fühlt sich an vielen Stellen folglich wie eine neue Hauptversion an. Sprachfunktionen, von deren Verwendung seit Jahren abgeraten wird, hat das PHP-Team entfernt. Neben dem als fragwürdiges Sicherheitsfeature verrufenem Safe Mode setzen die Entwickler endlich einen Schlussstrich unter Register Globals und Magic Quotes, die man gemeinhin als Quelle für potentielle Sicherheitsprobleme in PHP-Applikationen betrachtet. Mit dem Schritt zwingt man PHP-Entwickler, sich zunehmend selbst um die Sicherheit ihrer Applikationen zu kümmern und sich nicht auf anfällige Sicherheitsmechanismen zu verlassen. Eine Reihe von Initialisierungsoptionen fiel ebenfalls dem Rotstift zum Opfer. allow_call_time_pass_reference und y2k_compliance stehen nicht mehr zur Verfügung, mit dem Ziel, weniger Konfigurationsoptionen für das Verhalten der Sprache anzubieten, um damit die Portabilität zu erhöhen.

Entscheidender ist jedoch die Änderung an der Ini-Option default_charset. Gibt der Entwickler keine eigene Voreinstellung an, setzt PHP das Charset im Content-type Header nun standardmäßig auf UTF-8. Das ist sinnvoll und ebenfalls längst überfällig. Leider geht diese wichtige Änderung in Anbetracht der neuen Sprachfeatures häufig unter. Dabei ist zu erwarten, dass die Änderung auf schlecht konfigurierten Hosts zu Problemen führt – falls die Applikation nicht UTF-8 ausgibt und der Browser aufgrund des Content-Typs UTF-8 erwartet.

Kritik gibt es auf der Developer-Mailingliste für die Entscheidung, das Error Reporting Level E_STRICT bei der Angabe von E_ALL ebenfalls zu aktivieren. Viele PHP-Konfigurationen setzen das Error Reporting standardmäßig auf den Wert E_ALL. Verletzt die Anwendung einen Strict-Standard, wird nun ein Fehler angezeigt. Dadurch werden im schlimmsten Falle jedoch ungewollt Details zum Quelltext öffentlich, und man handelt sich ein Sicherheitsproblem ein, bestenfalls wirkt das nur peinlich. Zurücknehmen wird man die Entscheidung allerdings nicht, denn seit Jahren schon gilt die Empfehlung, Projekte auf Strict-Standard zu testen und sicherzustellen, dass der Quelltext frei von als "deprecated" markierten Features ist.

PHP 5.4 bringt viel Neues. Eine Reihe zusätzlicher Sprachelemente soll den Programmierern helfen, Anforderungen moderner Webanwendungen effektiver zu implementieren und die Sprache konsistenter zu machen.

Die größte Neuerung in PHP 5.4 sind Traits. Das aus Scala bekannte Konzept wurden schon 2007 von Stefan Marr vorgeschlagen und nach mehreren Anläufen und Verbesserungen schließlich in die neue Version übernommen. Traits erlauben es dem Entwickler, mehrere Sammlungen von Methoden in einer Klasse zu mischen und ermöglichen so die horizontale Wiederverwendung von Komponenten. Man erhofft sich, Anwendungen mit Traits kompakter gestalten zu können und Klassenhierarchien zu vereinfachen. Programmteile sollen zudem besser wiederverwendbar sein.

Ein Beispiel:

  <?php
trait Jsonify {
public function toJson() {
$res = [];
foreach ($this as $prop => $val) {
$res[$prop] = $val;
}
return json_encode($res);
}
}

class User {
public $id = 1;
public $username = 'test';
use Jsonify;
}

echo (new User)->toJson();

Im Gegensatz zum ganz ähnlichen Ansatz über Mix-ins können Klassen beim Verwenden von Traits Präferenzen oder Aliase angegeben, um mögliche Konflikte in Methodennamen aufzulösen:

  <?php
trait Serialization {
public function toJson() {
return null;
}
}

trait Jsonify {
public function toJson() {
$res = [];
foreach ($this as $prop => $val) {
$res[$prop] = $val;
}
return json_encode($res);
}
}

class User {
public $id = 1;
public $username = 'test';
use Jsonify, Serialization {
Jsonify::toJson insteadof Serialization;
}
}

echo (new User)->toJson();

Traits unterliegen einigen Einschränkungen. Sie können keine Interfaces direkt implementieren und die Definition von Properties ist nur eingeschränkt erlaubt. Eine ausführliche Dokumentation findet sich im PHP Manual.

Seit Jahren diskutiert die PHP-Community über die Aufnahme einer von Javascript und Python inspirierten Syntax für Arrays. Nach mehreren Anläufen hat man sich für eine neue Short-Arry-Syntax in PHP 5.4 entschieden. PHP Arrays lassen sich so über eckige Klammern erstellen, das Schlüsselwort array() wird nicht mehr benötigt:

  <?php
$heise = array('ix', 'ct', 'developer', 'mobile');
$heise = ['ix', 'ct', 'developer', 'mobile'];

Bei assoziativen Arrays hat man sich darauf verständigt die gewohnte PHP-Syntax für Schlüssel-Wert-Zuweisungen beizubehalten. Das soll unnötige Syntax-Kombinationen verhindern:

  <?php
$person = ['vorname' => 'Hans', 'nachname' => 'Mustermann'];

Zudem soll die Änderung den Programmcode kompakter machen und für Programmierer intuitiver sein.

PHP ist über die Jahre gewachsen und hat in der Zeit eine Vielzahl von Inkonsistenzen angehäuft. Eine Reihe kleiner Spracherweiterungen in PHP 5.4 sollen die Skriptsprache konsistenter machen und aus anderen Sprachen bekannte Konstruktionen ermöglichen. So erlaubt PHP nun das direkte Dereferenzieren von Array-Elementen nach einem Funktionsaufruf:

  <?php
function person() {
return ['vorname' => 'Hans', 'nachname' => 'Mustermann'];
}

echo person()['vorname'];

Im Rahmen dieser Änderungen ist nun der direkte Aufruf einer Methode nach einer Instanziierung möglich:

  <?php
(new Foo)->bar();

Eine komplette Liste der Änderungen findet sich auf der Seite des PHP-Projektes. Nutzern, die von PHP 5.3 auf PHP 5.4 wechseln wollen, sei der Migrations-Guide nahegelegt.

PHP ist eine der populärsten und verbreitesten Skriptsprachen im Web. Neu veröffentlichte Versionen benötigen daher mitunter Jahre, bis sie sich weitreichend durchgesetzt haben, und existierender Programmcode wird nur langsam an die neuen Versionen angepasst. Zwar läuft mittlerweile ein Großteil der PHP-Installationen auf PHP 5.3, dennoch findet man noch immer PHP-5.2-, PHP-5.1- oder sogar PHP-4-Installationen. Streckenweise sind die darauf laufenden Anwendungen inkompatibel zu neueren PHP-Versionen.

Daraus erwächst die Verantwortung der Entwickler und Release-Manager, die Sprache vorsichtig und in kleinen Schritten weiterzuentwickeln und eine Rückwärtskompatibilität langfristig zu sichern.

Die lang erwartete und notwendige Herausnahme der Register Globals und Magic Quotes ist deshalb eine weitreichende Entscheidung. PHP 5.4 räumt hier mit Altlasten auf und markiert einen wichtigen Meilenstein im Entwicklungszweig 5.x.

Eine Hinzunahme von neuen Features wie Traits und der neuen Array-Syntax mag spät erscheinen, zeigt aber, dass die PHP-Community die Entwicklungen anderer Sprachen aufmerksam verfolgt und neue Ideen aufzugreifen vermag. Mit Blick auf die notwendige Unterstützung der neuen Features über Jahrzehnte und im Wissen um historische Fehler wie Magic Quotes und Register Globals entwickelt sich PHP durchaus schnell. Das PHP-Team versucht, innerhalb der Entwicklergemeinde eine Balance zwischen notwendigen Neuerungen und Kompatibilität zu finden.

Dabei hat man auch immer die Performance der virtuellen Maschine mit im Blick. Eine Reihe tiefgreifender Änderungen am Kern des Interpreters verbessert die Ausführungsgeschwindigkeit und reduziert den Speicherverbrauch der Sprache deutlich. PHP 5.4 ist das mit Abstand schnellste und sehr leichtgewichtiges PHP. Erste Benchmarks zeigen einen um bis zu 30 Prozent verringerten Speicherverbrauch und eine bis zu 20 Prozent höhere Ausführungsgeschwindigkeit gegenüber der Vorgängerversion.

Kaum sichtbar, vollzog sich die größte Veränderung hinter den Kulissen. Nach der langen Entwicklungszeit von PHP 5.3 suchte man neue Methoden, um den Veröffentlichungszyklus zu verkürzen und Entscheidungen über neue Sprachfeatures zu Erleichtern. Noch während der Entwicklung der Version 5.3 hat sich ein informelles RFC-System herausgebildet, das man mit PHP 5.4 jetzt weiterführt. Darüber hinaus hat sich die Community auf monatliche Releases verständigt. So soll es Distributionen einfacher gemacht werden, neue PHP-Versionen zu integrieren und Sicherheitspatches schneller zur Verfügung zu stellen.

Die Neustrukturierung all dieser Prozesse und der kommende Wechsel auf ein dezentrales Versionskontrollsystem markieren den Weg zu einer offeneren und dynamischen Entwicklungsstruktur, die sich bereits jetzt positiv auswirkt. Plattformen wie GitHub sollen in Zukunft helfen, Neuerungen schneller vorzuschlagen und einzupflegen. Letztlich beschleunigt der neue Releaseprozess die Entwicklung der Sprache – PHP 5.5 ist für das kommende Jahr vorgesehen. Voraussichtlich wird dann auch die aktive Entwicklung von PHP 5.3 eingestellt.

David Soria Parra
ist Release Manager für PHP 5.4 und arbeitet als Softwareentwickler für die Mayflower GmbH.
(Robert Lippert)