Mit jedem Update einer Skriptsprache erhalten neue Funktionalitäten Einzug in die gewohnte Entwicklungsumgebung. Die meisten Innovationen bieten neue Features, elegantere Optionen hinsichtlich der Schreibweise beim Coding oder einfach die Korrektur von Fehlern im Vergleich zur letzten Sprachversion.
Da wir unseren Shared Hosting Kunden mittlerweile optional sowohl Version 5.3 als auch Version 5.4 zur Verwendung bereitstellen, möchten wir in diesem Artikel auf einige wichtige Änderung eingehen, um einen möglichst präzisen Überblick über die Auswahl zu verschaffen.

Dabei halten wir uns gezielt sehr nah an die Angaben auf http://php.net. Detaillierte Informationen können hier zur Vertiefung der Thematik nachgelesen werden.

Was ist neu im Vergleich zur Version 5.3?

Im Falle des Updates von PHP 5.3 auf die Version 5.4 sind folgende Neuerungen erfolgt:

  • Traits“ (Ergänzungen zur einfachen Vererbung) werden unterstützt.
  • Die „Short Array Syntax“ (möglicher Wegfall des Schlüsselworts beim Anlegen eines Array durch Verwendung eckiger Klammern) ist erlaubt.
  • Eine Dereferenzierung von Array-Inhalten ist direkt über den Rückgabewert einer Funktion möglich. Man spart sich einfach eine zusätzliche, temporäre Variable.
  • Anonyme Funktionen („Closures“) können die Objektreferenz „$this“ verwenden.
  • Die Kurzschreibweise, um Variableninhalte direkt auszugeben („<?=$variable?>“) ist auch ohne Aktivierung der „short_open_tag“-Option (php.ini) verfügbar.
  • Zugriff auf Klassenmethoden und –Eigenschaften ist bereits während der Instanziierung möglich.
  • Methoden einer Klasse können auch wie folgt aufgerufen werden: „Class::{expr}()“.
  • Das binäre Zahlenformat wurde hinzugefügt.
  • Optimierte Parser-Fehler-Benachrichtigungen und verbesserte Warnungen bei inkompatiblen Argumenten werden ausgegeben.
  • Die Session-Erweiterung kann auch Upload-Fortschritte festhalten.
  • Es wird (über CLI SAPI – „Command Line Interpreter/Interface“ & „Server Application Programming Interface“) ein eingebauter Webserver für Entwicklungszwecke angeboten.

Im Detail ergeben sich durch die Einführung dieser neuen Features bereits einige Änderungen im Vergleich zur Vorgängerversion. Wie nützlich die angesprochenen Änderungen für das eigene Projekt sind, darüber mag jeder selbst ein Urteil fällen. In der Regel ergeben sich deutliche Arbeitserleichterungen, die nicht punktuell auftauchen, sondern im gesamten Projekt wesentliche Optimierungen möglich machen.

Was geht nicht mehr?

Ein deutlich wichtigerer Punkt im Vergleich zu den Neuerungen ist die Menge an gewohnten Inhalten der Skriptsprache, die nach dem Update nicht mehr zur Verfügung stehen. Einige Funktionalitäten wurden bereits in der Vorgängerversion als „deprecated“ gekennzeichnet und wurden bei diesem Update völlig entfernt. In diesem Zusammenhang besteht daher wohl auch der dringendere Handlungsbedarf. Sollte das eigene Web-Projekt noch auf Funktionalitäten zurückgreifen, die aus diesem Fundus schöpfen, besteht höchstwahrscheinlich die Notwendigkeit, Anpassungen vorzunehmen.

Allgemein

  • Safe mode“ wird nicht länger unterstützt. Alle (Shared-Server-)Anwendungen, die auf dem „safe mode“ basieren, sollten dringend angepasst werden, sofern auf die Verwendung von PHP 5.4 umgeschaltet wird.
  • Magic quotes” wurde ebenfalls entfernt, da sich der Ansatz einer einzelnen Lösung für alle Quotierungen als problematisch erwiesen hatte. Aus Sicherheitsgründen sollte auch in diesem Fall Abstand von der Verwendung genommen werden.
  • Die Direktiven “register_globals” und “register_long_arrays” aus der Datei “php.ini” stehen ebenfalls nicht mehr zur Verfügung.
  • Weitere Direktiven die dem Update zum Opfer gefallen sind, sind die “mbstring.script_encoding“-Directiven. Stattdessen sollte auf “zend.script_encoding” zurückgegriffen werden.
  • Die Übergabe von Variablen an Funktionen per Referenz (“Call-time pass by reference”) ist nicht mehr möglich, bzw. Führt zu einer Fehlermeldung.
  • Die “break”- und “continue”-Ausdrücke unterstützen variable Angaben nicht mehr. Statische Angaben funktionieren nach wie vor. Als Nebeneffekt dieser Maßnahme funktionieren allerdings auch “break 0;” und „continue 0;“ nicht mehr.
  • Bei Datums- und Zeit-Erweiterungen kann die Zeitzone nicht mehr über die TZ Umgebungsvariable gesetzt werden. Stattdessen muss in der Datei “php.ini” (date.timezone Option) eine Zeitzone festgelegt werden, oder über die Funktion date_default_timezone_set(). Alternativ wird standardmäßig „UTC“ verwendet oder eine E_WARNING ausgegeben.
  • String Offsets, die nicht-numerischen Charakter aufweisen, z.B. “$a[‚foo‘]” wobei $a eine Zeichenkette ist ergeben einen Rückgabewert “false” bei der Prüfung mit isset() und „true“ bei einem Check mit empty() und resultieren in einer E_WARNING bei dem Versuch sie anzuwenden. Offsets des Typs “double”, “bool” sowie “null” führen zu einer E_NOTICE. Numerische Zeichenketten (z.B. “$a[‚2‘]”) funktionieren nach wie vor.
    Zu beachten ist, dass Offsets wie “12.3” und “5 foobar” als nicht-numerisch erkannt werden und ebenfalls zu einer E_WARNING führen, allerdings werden sie aus Gründen der Abwärtskompatibilität fälschlicherweise zu „12“ und „5“ umgewandelt.
  • Bei dem Versuch ein Array in eine Zeichenkette umzuwandeln, erscheint ein „E_NOTICE level error“, das Ergebnis des Aufrufs wird jedoch immerhin die Zeichenkette „Array“ sein.
  • Wenn NULL, FALSE, oder eine leere Zeichenkette durch Hinzufügen einer Eigenschaft in ein Objekt umgewandelt wird, wird sich ein „E_WARNING level error“ melden, anstelle von „E_STRICT“.
  • Parameter-Bezeichnungen, die identisch mit vordefinierten Variablen (“Superglobale”) sind (man spricht von „shadowing“), führen zu einem fatalen Fehler. So ist zum Beispiel die Ausführung von „foo($_GET, $_POST) {}“ nicht möglich.
  • Die “Salsa10” und “Salsa20” Hash-Algorithmen wurden beseitigt.
  • Die Funktion array_combine() antwortet mit dem Ergebnis “array()” statt “FALSE” wenn zwei leere Arrays als Parameter übergeben werden.
  • Bei der Verwendung von htmlentities() mit asiatischen Zeichensätzen wird das gleiche Ergebnis erzielt, wie durch htmlspecialchars(). Soweit war das Verhalten bereits in früheren PHP-Versionen, allerdings wird nun ein „E_STRICT level error“ angezeigt.
  • Der dritte Parameter von ob_start() ist nicht länger vom Typ “boolean”, sondern wird als ganzzahliger „integer flag“ verwendet.

Schlüsselwörter

Die nachfolgenden Schlüsselwörter gelten ab PHP Version 5.4 als reserviert und sollten daher nicht anders als Bezeichner verwendet werden:

  • trait
  • callable
  • insteadof

Funktionen und Aliase

Ferner sind folgende Funktionen aus dem PHP-Repertoire entfernt worden und stehen in PHP 5.4 nicht länger zur Verfügung:

  • define_syslog_variables()
  • import_request_variables()
  • session_is_registered(), session_register() sowie session_unregister().
  • ebenso diese Funktions-Aliase:
    • mysqli_bind_param()
    • mysqli_bind_result()
    • mysqli_client_encoding()
    • mysqli_fetch()
    • mysqli_param_count()
    • mysqli_get_metadata()
    • mysqli_send_long_data()
    • mysqli::client_encoding() und
    • mysqli_stmt::stmt()

Fazit

Als wichtiger Hinweis bleibt zu erwähnen, dass alle genannten Änderungen nur dann von Bedeutung sind, wenn die eingesetzte PHP-Version gewechselt wird. Sofern nach wie vor die alte Version 5.3 im Einsatz ist, sind die Informationen in diesem Artikel insofern irrelevant, als dass sie bei der Anpassung von bestehenden Projekten Beachtung finden sollten. Eine notwendige Anpassung liegt nur dann zu Grunde, wenn bereits in Erwägung gezogen wird, auf die Version 5.4 der serverseitigen Skriptsprache umzustellen.

Mehr Informationen, wie Sie bei Shared Hosting Produkten Verzeichnis-bezogen individuell zwischen PHP 5.3 und PHP 5.4 wechseln können, finden Sie in den folgenden FAQ-Artikeln:

Hat Ihnen dieser Artikel bei der täglichen Arbeit an Ihrem Webprojekt geholfen? Bewerten Sie ihn und/oder teilen sie Ihn auf Twitter oder Facebook, wenn der Inhalt Ihnen von Nutzen war.

Thomas von Mengden
Letzte Artikel von Thomas von Mengden (Alle anzeigen)

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten