PHP-LogoNachdem vor wenigen Tagen, am 24.02.2012, der RC8 von PHP 5.4 veröffentlicht wurde, rückt das eigentliche Releasedatum der neuen PHP-Version immer näher. Grund genug, mich einmal durch die Tiefen des Internets zu suchen um nähere Informationen zu der kommenden Version von PHP zusammen zu suchen.

Auf php.net wurden bereits ein Changelog vorbereitet, welches die aktuellen Änderungen explizit aufführt.

Zu den wichtigsten Neuerungen für PHP 5.4 zählen unter anderem:

  • Einführung von Traits
  • Array Dereferencing Support
  • Umstellung von ISO-8859-1 auf UTF-8
  • Entfernen von <?= aus den short_open_tags
  • Hinzufügen der http_response_code() Methode um für diese Funktionalität nicht mehr auf header() zugreifen zu müssen
  • Entfernen verschiedener Funktionen
  • Kurzsschreibweise für Arrays

Im Folgenden Text möchte ich ein paar der vielen Änderungen näher Erläutern.

Zu den umfangreichen Neuerungen gehören unter anderem Überarbeitungen an der Methode htmlspecialchars(). Darunter fallen zum Beispiel Erweiterungen des Doctype-Handlings und Verbesserungen am Error-Handling.

Für sehr praktisch halte ich den neuen Array-Dereferencing-Support und den Instance-Method-Call.
Array-Dereferencing-Support bedeutet nichts anderes, als dass ihr direkt hinter den Methodenaufruf (sofern die Methode ein Array zurückliefert) den passenden Index für das aufzurufende Element anhängen könnt und das entsprechende Feld bekommt.

function flights() {
  return ['NYC', 'LEJ', 'SYD'];
}

//alt
$flight_one = flights();
echo $flight_one[1];
//neu
echo flights()[1]; // Ausgabe: LEJ

Der Instance-Methode-Call ist eine ebenso praktische Neuerung. Ihr habt hierdurch die Möglichkeit, euren PHP-Code wie folgt zu verkürzen:

//alt
$flightObj = new Flights();
$flight = $flightObj->getFlight();
//neu
$flight = (new Flights)->getFlight();

Die neue Version von PHP hat jedoch auch im Bereich der Security und Scriptsicherheit zugelegt. Die file_exists()-Methode ist nun endlich kein Scheunentor mehr für einfallende Hacker. Durch Überarbeitung und das Ignorieren sog. NULL-Bytes sind Angriffe über ein Path Traversal so nicht mehr möglich.

Ein besonderes Augenmerk bei der Entwicklung erhielten unter anderem auch die folgenden Methoden – sie werden schlichtweg aus PHP entfernt und sollten nicht mehr verwendet werden:

  1. allow_call_time_pass_reference()
  2. import_request_variables()
  3. magic_quotes()
  4. register_globals()
  5. register_long_arrays()
  6. session_is_registered()
  7. session_register()
  8. session_unregister()

Auch interessant ist die neue Kurzschreibweise für Arrays:

$foo = ['foo', 'bar'];
print_r($foo);

Array
(
    [0] => foo
    [1] => bar
)

$bar = ['foo' => 'bar'];
print_r($bar);

Array
(
    [foo] => bar
)

Danke an Daniel von Dev-Talk für diesen interessanten Blog-Eintrag. Ob das Ganze nun eine sinnvolle Neuerung ist, lasse ich mal im Raum stehen – ich finde es nicht unbedingt förderlich für eine saubere und gut lesbare Implementierung.

Zum Schluss noch eine der (meiner Meinung nach) größten Neuerungen in PHP 5.4: Traits. Die Erklärungen, was Traits sind, spare ich mir – an Hand des folgenden Quellcodebeispiels sollte es sich jeder Entwickler selbst ableiten können.

trait Flight
{
     public static function flights()
          {
               echo "Ibiza";
          }
}

trait Booking
{
     public static function bookers()
     {
          echo "John Doe";
     }
}

class Flights
{
     use Flight;
}

class HolidayTravel
{
     use Flight;
     use Booking;
}

Flights::flights(); //Ibiza
HolidayTravel::flights(); //Ibiza
HolidayTravel::bookers(); //John Doe