Was ist neu in PHP 5.4?
Kommentare

Die wichtigsten Features
Das am längsten diskutierte Feature sind die so genannten Traits. Sie wurden schon 2008 von Stefan Marr unter dem Stichwort „Horizontal Reuse“ vorgeschlagen und mussten sogar

Die wichtigsten Features

Das am längsten diskutierte Feature sind die so genannten Traits. Sie wurden schon 2008 von Stefan Marr unter dem Stichwort „Horizontal Reuse“ vorgeschlagen und mussten sogar zwei RFCs und diverse lange Diskussionen auf der Internals-Mailing-Liste überstehen. Steve Cook wird der Satz „Multiple inheritance is good, but there is no good way to do it.“ zugeschrieben, und Traits sind der Idee geschuldet, Mehrfachvererbung so zu implementieren, dass die Vorteile die Nachteile überwiegen [1]. Details zur Traits-Implementierung sind unter [2] zu finden. Als Beispiel mag hier eine Reihe von Klassen dienen, die alle gewisse Aktionen mitloggen können sollen, aber keine Vererbungshierarchie teilen und somit dieselbe Funktionalität entweder duplizieren oder kapseln müssten (Listing 2).

Listing 2
debug("starting engine"); 
} 
} 

class Foo extends Two { 
use logging; 

public function something() { 
// do stuff 
$this->warn("oops"); 
} 
} 

(new Car)->startEngine(); 
(new Foo)->something(); 
?>

PHP 5.4 hat auch endlich einen internen Webserver bekommen, der in der Entwicklung gute Dienste leisten kann. Er sollte aber allein schon aus Performancegründen nicht produktiv eingesetzt werden, da der Webserver alle Requests nacheinander behandelt (also auch eingebundene Stylesheets, Grafiken und JavaScript-Dateien). Es ist auch zu vermuten, dass dieses neue Feature im Releasezyklus nicht so stark getestet wurde, wie die Änderungen, die im Betrieb der eigenen Anwendung auf der neuen Version benutzt werden. Auch die Dokumentation empfiehlt explizit keinen Produktiveinsatz.

Aufgerufen wird der interne Webserver auf der Kommandozeile mit dem Befehl php -S hostname:port. Hierbei dürfte hostname:port im Normalfall wohl so etwas wie localhost:81 sein. Damit der Webserver aber auch von außen erreichbar ist, kann auch 0.0.0.0:81 benutzt werden. Dabei wird dann das aktuelle Verzeichnis als DocumentRoot benutzt, das kann jedoch alternativ mit dem Argument -t beim Start explizit gesetzt werden. Außerdem ist es möglich, ein PHP-Skript als letztes Argument anzugeben, das einen minimalen Front Controller abbildet. Hierzu zeigt Listing 3 ein Beispiel aus der Dokumentation.

Listing 3
<?php // router.php 
if (preg_match('/.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) 
return false; 
else { 
echo "

Welcome to PHP"; } ?>

Dateien, die laut ihrer Dateiendung Bilder sind, werden hier direkt ausgeliefert, ansonsten wird einfach Inhalt zurückgegeben. Das kann via direkter Ausgabe oder include/require geschehen. Kompliziertere Setups, wie in Anwendungen mit vielen mod_rewrite, dürften sich mit einem gewissen Aufwand portieren lassen. Leider gibt es hier aber noch keine allgemein bekannte, schnelle Lösung. Doch da die meisten aktuellen Frameworks sowieso im DocumentRoot alle Aufgaben von der index.php erledigen lassen, sollte sich der Aufwand in Grenzen halten.

Der Webserver gilt als eigenes SAPI (Server API) mit dem Namen cli-server, gilt vom Verhalten her aber auch als CLI Binary und benutzt somit nicht dieselbe php.ini wie das üblicherweise im Webserver eingesetzte CGI/FastCGI Binary. Die Option -c beim Start ermöglicht es aber auch hier, die gewünschte php.ini zu verwenden. Hier kann via cli_server.color auch eine farbige Ausgabe am Kommandozeilen-Prompt aktiviert werden. Weiterhin unterstützt PHP eine kurze Array-Syntax ähnlich der von JavaScript oder anderen Sprachen. Auf die Einführung von : statt => wurde jedoch verzichtet, die []-Notation kann einfach als Kurzform von array() verstanden werden (Listing 4).

Listing 4
 1, 'b' => 2]; 
?> 

Themen der nächsten Seiten:

  • Weitere Features
  • Neue Prozesse
  • Fazit
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -