PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


PHP 5.6.0 released! Neue Funktionen

with 6 comments

Vor ziemlich genau einer Stunde ist PHP 5.6 final erschienen, und es ist Zeit sich die neuen Features und Vorteile anzuschauen. Aus meiner Sicht lohnt ein Upgrade, allein schon wegen der geschenkten 10% Performance gegenüber PHP 5.5.

Die neue Version kann auf der Downloads-Seite von php.net heruntergeladen werden. Die neuen Features sind die folgenden:

  1. Konstante skalare Ausdrücke (Constant scalar expressions): Bisher durften Konstanten nur „statische Werte“ enthalten, also zum Beispiel  1  oder „ein string“. Nun dürfen dort auch einfache Berechnungen gemacht werden. Hier ein paar Beispiele:
    <?php
    const ONE = 1;
    const TWO = ONE * 2;
    
    class C {
        const THREE = TWO + 1;
        const ONE_THIRD = ONE / self::THREE;
        const SENTENCE = 'The value of THREE is '.self::THREE;
    
        public function f($a = ONE + self::THREE) {
            return $a;
        }
    }
  2. Variadische Funktionen (Variadic functions): Wenn eine Funktion eine variable Anzahl an Parametern erhalten soll, musste man sich bisher mit der Funktion func_get_args() behelfen. Nun geht das ein wenig eleganter:
    <?php
    function f($req, $opt = null, ...$params) {
        // $params is an array containing the remaining arguments.
        printf('$req: %d; $opt: %d; number of params: %d'."\n",
               $req, $opt, count($params));
    }
    
    f(1);
    f(1, 2);
    f(1, 2, 3);
    f(1, 2, 3, 4);
    f(1, 2, 3, 4, 5);
  3. Argument unpacking (der „splat“-Operator): Bei einem Funktionsaufruf ein Array entpacken:
    <?php
    function add($a, $b, $c) {
        return $a + $b + $c;
    }
    
    $operators = [2, 3];
    echo add(1, ...$operators);
  4. Potenzierung mittels ** Operator:
    <?php
    $i = 2 ** 3; // Ergebnis: 8
    $a = 3;
    $a **= 3; // Ergebnis: 27
  5. Funktionen und Konstanzen in einen Namespace importieren: Bisher konnte man nur andere Klassen importieren, nun geht das auch mit Funktionen und Konstanten:
    <?
    namespace {
        use const Name\Space\FOO;
        use function Name\Space\f;
    }
  6. Der interaktive Debugger phpdbg ist nun Teil von PHP. Damit kann man nun auf Terminalebene ein Script debuggen, Breakpoints setzen, Zeile für Zeile das Script laufen lassen, sich die Opcodes anschauen, und das ganze ohne großen Performanceverlust. Details sind in der Doku von phpdbg zu finden.
  7. Funktionen, die Encoding-spezifisch sind wie beispielsweise htmlspecialchars(), nutzen nun die php.ini-Einstellung default_charset als Standard. Dieser ist normalerweise auf UTF-8 gesetzt, sodass das lastige Angeben des $encoding-Parameters entfällt (denn meistens arbeitet man ja heutzutage mit UTF-8).
  8. Dateien, die größer als 2 GB sind, können nun hochgeladen werden!
  9. Es gab diverse Verbesserungen beim SSL/TLS Support, zum Beispiel ist die „Peer Verification“ nun standardmäßig aktiv, d.h. die Gegenstelle muss ein gültiges SSL-Zertifikat vorweisen können wenn https:// genutzt wird. Bisher war diese Einstellung deaktiviert, was unsicherer war, denn es wurden auch abgelaufene Zertifikate oder Zertifikate für eine falsche Domain angenommen.
    Man kann nun detaillierte Einstellungen der verschlüsselten Verbindung einstellen und auch abfragen, insgesamt ein paar sehr wichtige Änderungen meiner Meinung nach.
  10. Wer PostgreSQL als Datenbank nutzt wird sich freuen über die neuen asynchronen Verbindungen und SQL-Abfragen.
  11. Bei der Erstellung von Zip-Archiven kann nun ein Passwort festgelegt werden: ZipArchive::setPassword()

Die wichtigsten Änderungen, die bestehenden Code betreffen und durch die es zu Fehlern kommen kann (backwards incompatible changes), sind folgende:

  1. json_decode() nimmt nun nur noch die klein geschriebenen Werte true, false und null an. Wer also versucht mit der Funktion JSON zu decodieren in dem TRUE, True, FALSE, False, NULL oder Null vorkommt, wird einen Fehler bekommen, und der String wird nicht korrekt dekodiert werden. Der Standard erlaubt nur die klein geschriebenen Varianten, und PHP hält sich nun strikt dran. Man sollte also vorher seine JSON-Strings überprüfen die man von irgendwo bekommt.
  2. Die oben in Punkt 9 erwähnte „Peer Verification“ könnte verschlüsselte Verbindungen nicht zustande kommen lassen, die bisher funktionierten. Durch die nun aktivierte Prüfung werden ungültige, sprich abgelaufene, selbst signierte oder nicht zur Domain passende Zertifikate, abgelehnt. Man muss in solchen Fällen, wenn man sich sicher ist dass man diese ungültigen Zertifikate erlauben will, die „verify_peer“ und „verify_peer_name“ context option auf false setzen.
  3. Soll eine Datei mittels curl hochgeladen werden, konnte bisher einfach eine der Variablen auf @Dateipfad gesetzt werden, dies bewirkte einen Dateiupload. Da dies unsicher ist wurde diese Funktionalität nun standardmäßig deaktiviert.

Ein schönes kurzes Video von Laracasts auf Englisch zeigt einige der neuen Features.

Weitere wichtige Quellen, um sich die Details der neuen Version anzuschauen, sind das CHANGELOG und die Migrationsseite von 5.5 auf 5.6,

Nach wie vor gibt es die Diskussion ob es PHP 5.7 geben wird, oder ob die nächste Version PHP 7 sein wird. Einige sprechen sich für die kleine Zwischenversion 5.7 aus, um Vorbereitungen für PHP 7 zu treffen, einie Features als „deprecated“ markieren zu können, und den Übergang zur neuen großen Version leichter zu machen. Andere halten nichts von der Idee und würden eine volle Konzentration auf PHP 7 bevorzugen. Mal sehen wie sich da entschieden wird.

5.3 hat vor kurzem sein End-of-Life gehabt, 5.4 erhält ab jetzt nur noch wichtige Sicherheitsupdates.

Ein Upgrade auf 5.6 ist meiner Ansicht nach zu empfehlen, gerade weil es kaum Probleme gibt wenn man die 3 Punkte oben beachtet, und man 10% Performance geschenkt bekommt. Außerdem wird der Überganz zu PHP 7 durch jede Zwischenversion einfacher, da in kleineren Schritten vorgegangen werden kann. In Testsystemen oder in unkritischen Projekten sollte 5.6 zeitig ausprobiert werden, sodass die Produktionssysteme spätestens in 1-2 Monaten, wenn 5.6.1 erschienen ist, von der neuen Version profitieren können.

Written by Michael Kliewe

August 28th, 2014 at 3:44 pm

Posted in PHP

Tagged with , ,

6 Responses to 'PHP 5.6.0 released! Neue Funktionen'

Subscribe to comments with RSS or TrackBack to 'PHP 5.6.0 released! Neue Funktionen'.

  1. Bei json_decode() wäre ein STRICT_FLAG oder so ganz nett gewesen. Eine manuelle Prüfung macht wenig Sinn (deswegen nutze ich ja die Funktion…) und meistens bekomme ich das JSON von außen – hab also keinen Einfluss drauf wie mein Kommunikationspartner das JSON formatiert.

    Ist halt nicht hilfreich sich hinzustellen und zu sagen „Dein JSON hält sich aber nicht an den Standard :<"

    Pascal

    28 Aug 14 at 17:15

  2. Fabian

    28 Aug 14 at 17:44

  3. […] PHP 5.6.0 released! Neue Funktionen Vor ziemlich genau einer Stunde ist PHP 5.6 final erschienen, und es ist Zeit sich die neuen Features und Vorteile anzuschauen. Aus meiner Sicht lohnt ein Upgrade, allein schon wegen der geschenkten 10% Performance gegenüber PHP 5.5. […]

  4. Strict Flag wäre wohl echt sinnvoll gewesen, gerne auch standardmäßig auf true. Allerdings kann man wohl davon ausgehen, dass zeitnah nahezu jegliche Schnittstellen (die benutzt/gescraped werden wollen) ihre JSON return Werte anpasst.

    Xandi

    30 Aug 14 at 10:30

  5. Vielen Dank für den super Artikel. Sehr ausführlich und sehr informativ.

    Ich finde die konstanten skalaren Ausdrücke sehr nützlich und habe mich des Öfteren geärgert, wenn Konstanten auf einander „aufbauen“, dass ich sie nicht verbunden kriege – nervig!

    Auch die variadischen Funktionen sind ein Segen, allerdings muss ich mich da auch erstmal an die Syntax gewöhnen.

    Alles in allem, wirklich sinnvolle Erweiterungen, meines Erachtens.

    Im letzten Absatz ist auch noch ein kleiner Typo. Dort sollte es sicher „Übergang“ heißen.

    Päddl

    2 Sep 14 at 11:54

  6. […] denn jedes Release hat was Neues. Dieser Beitrag listet die Änderungen aber schön auf. PHP 5.6.0 released! Neue Funktionen Vor ziemlich genau einer Stunde ist PHP 5.6 final erschienen, und es ist Zeit sich die neuen […]

Leave a Reply

You can add images to your comment by clicking here.