
PHP hat seit seiner ersten Inkarnation im Jahr 1994 viel Veränderung erfahren. (Foto: Photovibes/Shutterstock)
1994 von Rasmus Lerdorf entworfen, war die erste Inkarnation PHPs nicht mehr als eine Reihe von CGI-Binaries, geschrieben in der Programmiersprache C. Im Verlauf der mittlerweile knapp 27-jährigen Existenz hat PHP zahlreiche Updates und Veränderungen durchlaufen. Das jüngste große Update: Der Release von PHP 8.0 in 2020 – mit Performanceverbesserungen, einem JIT-Compiler, Union-Types, named Arguments und einer ganzen Reihe Neuerungen mehr, die wir bereits ausführlich und zusätzlich in einer News zum Release-Date für euch beleuchtet haben. Laut erster Benchmarks scheinen sich neue Features wie JIT-Compiler und Preloading im Großen und Ganzen positiv auf die Performance auszuwirken.
Auch der PHP-Paketmanager Composer hat 2020 mit Version 2.0 ein großes Update mit einer Menge UX-Verbesserungen erhalten. Auch was die Performance angeht, hat das Tool im Vergleich zur Vorversion ordentlich zugelegt: Installationen sollen mit bis zu dreifacher Geschwindigkeit durchgeführt werden können.
Für Ende 2021 angesetzt: PHP 8.1
Das Core-Team um die Programmiersprache arbeitet bereits mit Hochdruck an Version 8.1, die voraussichtlich Ende 2021 erscheinen soll. Unter den bisher bekannten Neuerungen sind zwei besonders erwähnenswert: Sogenannte Enums und sogenannte Fibers.
PHPs Typensystem bekommt Enums
Diese in Kraft tretende Neuerung betrifft PHPs Typensystem. Eine Enum ist ein Variablentyp mit einer festgelegten Anzahl an vom Entwickler festgelegten Values. Diese Values, auch Enumeratoren genannt, verhalten sich wie Konstanten, das heißt, sie werden während der Ausführung eines Programms nicht verändert. Einer Variable, die als Enum declared wurde, kann jeder dieser Values – oder Enumeratoren – zugewiesen werden.
So sehen sie aus:
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}
Die Values eines Enums sind konstant und können typisiert werden:
class BlogPost
{
public function __construct(
public Status $status,
) {}
}
Via:
$post = new BlogPost(Status::DRAFT);
wird die Enum erstellt und an Blogpost
übergeben.
Was das Typensystem angeht, gibt es noch eine weitere Neuerung: den never
-Type, der verwendet werden kann, um anzuzeigen, dass eine Funktion ein Programm tatsächlich stoppt. Gerade für statische Analyse-Tools ist das Feature hilfreich.
Asynchrone Anwandlungen: Fibers
Mit dem für November angesetzten nächsten Release soll PHP Coroutines bekommen, auch Green Threads oder Fibers genannt. Obwohl es um den RFC einigen Buzz gab, ist das Feature wohl nicht so bahnbrechend, wie es vielleicht zunächst den Anschein hat. Warum? Fibers sind nicht dazu gedacht, direkt im Code einer PHP-App verwendet zu werden, so der Text des RFC, sondern stellen vielmehr eine Low-Level-API zur Flow-Steuerung. Im Code einer Anwendung sollen dann lediglich die resultierenden Abstraktionen verwendet werden.
Nichtsdestotrotz nimmt das Interesse an Frameworks für die asynchrone Ausführung von PHP zu: Amphp und React PHP bekommen Zulauf. Erst kürzlich gab außerdem Laravel Pläne für integrierte Unterstützung für Swoole bekannt, wie die beiden erstgenannten ein weiteres Framework für asynchrones PHP.
Es bleibt spannend
Wir bleiben gespannt auf die weiteren Pläne für Version 8.1. Für einen Deepdive zu den genannten und allen weiteren bisher bekannten geplanten neuen Features und allen weiteren Entwicklungen der jüngsten Zeit sei euch in der Zwischenzeit der Blog von PHP-Entwickler Brent Roose ans Herz gelegt. Übrigens: Wer seine Projekte aus Scheu vor dem Zeitaufwand bisher nicht auf Version 8.0 updaten wollte – laut seiner Aussage ist der damit verbundene Aufwand mit circa einer Stunde pro Projekt wirklich überschaubar.
Im Screenshot/Thumbnail sollte mit isset() zunächst geprüft werden, ob die entsprechenden Indexe im $_POST Array gefüllt sind, bevor man auf diese zugreift. Sonst hagelt es Warnings.