Skip to main content

PHP 7.4 steht vor der Tür: Das sind die Neuerungen

Der Winter steht vor der Tür. Das heisst für die PHP-Gemeinde auch immer: Eine neue PHP-Version ist im Anmarsch. Voraussichtlich am 28. November 2019 soll die neueste PHP-Version 7.4 als erste stabile Variante erscheinen. PHP 7.4 markiert zugleich auch die letzte Version aus dem PHP-7-Strang. Die nächste Version nach PHP 7.4 wird damit PHP 8.0 sein und naturgemäss etwas grössere Neuerungen und Änderungen mit sich bringen. Aber konzentrieren wir uns doch auf die Gegenwart und damit PHP 7.4.

PHP 7.4: Bessere Performance und weniger Fehleranfälligkeit

Die neueste Version bietet wieder eine Menge neue Funktionen, die PHP als Programmiersprache weiter bringen werden. Uns haben es drei der Neuerungen ganz besonders angetan: Arrow Functions, Typed Properties und Preloading. Wir schauen uns diese neuen Features deshalb genauer an.

PHP 7.4: Das sind die Neuerungen.

Arrow Functions: Weniger Code für anonyme Funktionen

Anonyme Funktionen, also Funktionen ohne referenzierbaren Namen, waren in PHP bisher nur mit viel Code zu bewerkstelligen. Dank Arrow Functions reduziert sich der Zeichenaufwand bei solchen One-Liner-Funktionen drastisch. Hier ein Beispiel aus dem offiziellen RFC bzw. dem Projekt Pimple.

$extended = function ($c) use ($callable, $factory) {
    return $callable($factory($c), $c);
};

// with arrow function:
$extended = fn($c) => $callable($factory($c), $c);

Arrow Functions, auch Short Closures genannt, folgen dabei den folgenden Regeln:

  • Sie starten mit dem Keyword fn.
  • Sie können nur einen Ausdruck beinhalten, nämlich die Anweisung return .
  • Die Funktion darf kein return-Keyword beinhalten.
  • Parameter und Rückgabetypen können mit Typ-Hinweisen versehen werden.

Dank Arrow Functions reduziert sich also der Programmieraufwand für die viel genutzten anonymen Funktionen, da weniger sogenannter Boilerplate-Code benötigt wird.

Typed Properties: Weniger Fehleranfälligkeit

Als weitere tolle Neuerung haben unsere Software-Engineers die sogenannten Typed Properties auserkoren. Typed Properties machen PHP zu einer typensichereren Sprache.

Typed Properties ist mein Lieblingsfeature. Erhöht die Vorhersehbarkeit von Code und reduziert die Fehleranfälligkeit. Viel einfacher zu Debuggen 💪


Lukas Mäglin
Software Engineer

Der folgende Code:

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }

    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }

    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

kann neu folgendermassen geschrieben werden und bleibt weiterhin typsicher:

class User {
    public int $id;
    public string $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

Getter- und Setter-Methoden sind damit zur reinen Sicherstellung von Typsicherheit nicht mehr nötig.

Preloading: Mehr Performance für Frameworks

Frameworks wie Symfony oder Laravel (das zum Teil auf Symfony basiert) sind für Entwicklerinnen und Entwickler nicht wegzudenken, wenn es darum geht, die eigene Applikation auf ein gutes Fundament zu stellen. Deshalb setzen auch immer mehr bekannte Content-Management-Systeme wie Drupal oder Contao auf bekannte Frameworks als Fundament.

Solche Frameworks bestehen in der Regel aus vielen verschiedenen Klassen, die dank OPcache nicht bei jedem Aufruf in Maschinencode übersetzt werden müssen. Was bislang in PHP allerdings fehlte, war die Möglichkeit, OPcache bereits vor dem ersten Aufruf «aufzuwärmen». Das konnte dazu führen, dass nach einem Event, der den OPcache leert, die Zugriffszeit auf die Applikation höher war. Dank Preloading erhalten Entwicklerinnen und Entwickler nun ein Instrument, um OPcache bereits vor dem ersten Aufruf mit den wichtigsten Klassen zu füllen. So wird der benötigte Code bereits beim ersten Aufruf aus OPcache geladen und muss nicht zuerst interpretiert werden.

Während Preloading auf OPcache basiert, verhalten sich per Preloading gecachte Dateien nicht komplett gleich, wie wenn sie über den «normalen» Weg in OPcache abgelegt werden. Denn OPcache bietet die Möglichkeit, gecachte Daten auf ihre Aktualität zu prüfen. Hat sich zum Beispiel der Zeitstempel der gecachten Datei geändert, wird die Datei nicht aus OPcache geladen, um den neuesten Stand auszuliefern.

Ausserdem speichert OPcache einzelne Dateien unabhängig voneinander. Abhängigkeiten in Klassen, die in unterschiedlichen Dateien gespeichert sind, müssen damit trotzdem bei jedem Aufruf neu aufgelöst werden. Dieser Vorgang benötigt wiederum Rechenzeit, die mit Preloading zusätzlich eingespart werden kann.

Denn per Preloading gecachte Dateien und deren Abhängigkeiten werden bereits beim Preloading-Vorgang im Arbeitsspeicher abgelegt bzw. aufgelöst. Die gecachten Dateien verhalten sich somit wie eine Applikation, die vor der Ausführung kompiliert werden muss, wie das zum Beispiel von Java bekannt ist. Die Vorteile liegen damit auf der Hand: Habe ich eine Applikation, deren Dateien sich nicht ständig verändern, erhalte ich dank Preloading noch mehr Performance. Leistungssteigerungen von bis zu 16% sind laut ersten Tests möglich.

PHP 7.4: Letzte Version im 7er-Strang

Nebst den bereits genannten Neuerungen, bringt PHP 7.4 eine ganze Liste mit weiteren Verbesserungen. Wie bei jeder neuen PHP-Version üblich, enthält der neueste Ableger auch Änderungen, die mit älteren Versionen nicht kompatibel sind. Ein Leitfaden für die Umstellung der eigenen Applikation auf die letzte Version im 7er-Strang findet sich auf php.net.

Die Arbeiten an der nächsten PHP-Version haben übrigens bereits begonnen. Während zu diesem Zeitpunkt noch keine genaueren Informationen zu Funktionsumfang und Veröffentlichung bekannt sind, wird PHP 8.0 wohl einen sogenannten Just-in-Time-Compiler (JIT) mitbringen. Wir sind gespannt 🙂

Originaler Post


Keine Kommentare vorhanden