PHP 8 ist da: Die neuen Features im Überblick
Es ist soweit: Am 26. November 2020 erschien das Major Update auf die Version PHP 8.0. Gegenüber der Vorgängerversion PHP 7.4 bringt PHP 8.0 viele neue Features mit. Die noch ältere Version 7.2 wird bereits nicht mehr weiterentwickelt und der Security Support lief am 30. November 2020 aus. Folglich werden viele Hoster in Kürze PHP 7.2 nicht mehr unterstützen. Lesen Sie hier, welche Vorteile Ihnen PHP 8.0 bringt und wann Sie spätestens aktiv werden sollten.
Boost your Wesbite
PHP ist da
Die neuen Features im Überblick:
kostenloses Performance-Upgrade von mehr als 45%
Im November 2020 erschien das Major Update auf die Version PHP 8.0. Gegenüber der Vorgängerversion PHP 7.4 bringt PHP 8.0 viele neue Features mit. Die noch ältere Version 7.2 wird bereits nicht mehr weiterentwickelt und der Security Support lief am 30. November 2020 aus. Folglich werden viele Hoster in Kürze PHP 7.2 nicht mehr unterstützen. Lesen Sie hier, welche Vorteile Ihnen PHP 8.0 bringt und wann Sie spätestens aktiv werden sollten.
Was ist neu an PHP 8.0?
Die vielen Neuerungen von PHP 8.0 sind für die tägliche Arbeit von Webentwicklern und für Webseitenbetreibern von großem Vorteil. Mit PHP 7.0 begann die Transformation von einer einfachen Skriptsprache zu einer hochprofessionellen Programmiersprache. Mit dem JIT Compiler von PHP 8.0 ist nun ein weiterer wichtiger Meilenstein erreicht worden. Neben dem JIT Compiler zählen Named Arguments, Union Types und Weak Maps zu den wichtigsten Innovationen.
JIT Compiler
Der neue JIT (Just in Time) Compiler soll die Performance von PHP Scripten enorm verbessern. Bis dato wird PHP Zeile für Zeile interpretiert. Das übernimmt ein sog. Interpreter, der die Operationen für das zu interpretierende Programm ausführt. Im Zuge dessen kann der Interpreter auch die Einhaltung übergeordneter Sicherheitsrichtlinien sicherstellen. Das Verfahren soll sich nun – zumindest zum Teil – ändern. Der JIT Compiler von PHP 8 ist in der Lage Teile des PHP-Codes „on the fly“ zu kompilieren. Kompilieren ist ein Verfahren, bei der ein ursprünglicher Code von der Quellsprache in eine andere Zielsprache – zum Beispiel eine maschinenlesbare Sprache – übersetzt wird. Die Umsetzung des neuen Codes soll verlustfrei geschehen. Der JIT Compiler soll nun PHP-Code-Bestandteile, die besonders häufig ausgeführt werden, zu einem optimierten Maschinencode kompilieren. Der neue Code wird dann – analog zu einem Cache – gespeichert und kann jederzeit abgerufen werden. Das führt zu einer erheblichen Performancesteigerung von bis zu 45%, wie Pedro Escudero messen konnte. Und nicht nur das.
Durch den JIT Compiler lassen sich nun auch Ausgaben von klassischen Geschäftsprozessen abbilden.
Diese wurden in der Vergangenheit aus Performancegründen üblicherweise in Java oder ASP.NET geschrieben. Nun aber lassen sich auch hochkomplexe Algorithmen zur Verarbeitung großer Datenmengen für Big Data und KI Anwendungen problemlos mit PHP realisieren. Die Open Source Kultur mit Millionen von Programmbibliotheken (libraries) und die Tatsache, dass nahezu alle Entwickler bereits Projekte in PHP umgesetzt haben und PHP von fast allen Hostern unterstützt wird, macht PHP bei der Wahl der webbasierten Programmiersprache zur Nummer 1 – in Zukunft auch gegenüber Java und ASP.NET.
PHP – was ist das und was kann es?
PHP steht für Hypertext Preprocessor und ist eine lizenzfreie Open-Source-Skriptsprache für webbasierte Programmierung. Und da sie nicht nur kostenfrei, sondern auch verhältnismäßig leicht zu erlernen ist, ist sie unter den Top 10 aller Programmiersprachen. PHP kann in HTML eingebettet werden. Während es sich bei HTML um eine textbasierte Auszeichnungssprache handelt, die das statische Gerüst bzw. Layout der Seite bildet, werden die PHP-Inhalte dynamisch auf dem Server erzeugt. Dazu gehören zum Beispiel Bilder, PDF-Dateien oder unterschiedliche Arten von Texten wie XHTML (engl. Extensible Hypertext Markup Language) oder XML (engl. Extensible Markup Language) Dateien.
Ein häufiges Anwendungsbeispiel sind Datenbankeinträge, deren Inhalte von PHP abgefragt, dynamisch generiert und in Textform ausgegeben werden. PHP kann die erstellten Dateien nicht nur ausliefern, sondern auch speichern, sodass auf dem Server ein Cache der Inhalte vorhanden ist. Und das Schönste daran ist, dass PHP sehr viele Datenbanken unterstützt und die Erstellung von datenbankgestützten Programmen mittels der Datenbankerweiterungen von PHP extrem einfach ist.
Neben dem JIT Compiler sind die Named Arguments eines der wichtigen neuen Features der Major Version PHP 8.
Named Arguments ermöglichen die Eingabedaten mithilfe eines Parameternamens an eine Funktion zu übergeben. Grundsätzlich eine feine Sache, welche die Arbeit des Webentwicklers vereinfacht. An dieser Stelle sei allerdings erwähnt, dass dieses Thema durchaus auch kontrovers diskutiert wird, da Bedenken bezüglich der Abwärtskompatibilität und der Inkompatibilität von Parameternamen bestehen. Allerdings wird diesbezüglich auch schon an Lösungen gearbeitet, wie in dem Artikel von Matthew Brown ausgiebiger diskutiert wird.
# Named arguments used on a built-in PHP function
setcookie(
name: 'test',
expires: time() + 60 * 60 * 2,
);
# A DTO making use of promoted properties, as well as named arguments
class CustomerData
{
public function __construct(
public string $name,
public string $email,
public int $age,
) {}
}
$data = new CustomerData(
name: $input['name'],
email: $input['email'],
age: $input['age'],
);
# Named arguments also support array spreading
$data = new CustomerData(...$customerRequest->validated());
Null safe operator
Bis dato mussten model relations, die auch null sein dürfen, mittels Zwischenprüfungen umgesetzt werden. Oder man musste sich auf das eingesetzte Framework verlassen.
Durch "null safe operator" werden wir viele Zeilen an Code einsparen und der "error: Call to a member function on null?" gehört endlich der Vergangenheit an.
Timo Poppinga CTO zdreicom AG
# Null safe operator
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
Und so schaut es nun in PHP 8 aus:
# Use of null safe operator
$country = $session?->user?->getAddress()?->country;
Union Types
Wie der Name bereits sagt, sind Union Types eine Vereinigung von mindestens zwei Typen, wobei alle in der Union vorhandenen Typen verwendet werden können. Beispielsweise:
# Union Types
public function foo(Foo|Bar $input): int|float;
Eine Beschränkung hinsichtlich der Union Types besteht jedoch: void gibt keinen Rückgabewert aus und kann daher nicht Bestandteil des Union Types werden. Zudem können nullable Unions mit |null oder ? geschrieben werden. Beispielsweise:
# Union Types (Beschränkungen)
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
Weak Maps
WeakMaps stellen eine sinnvolle Ergänzung zu den bereits mit PHP 7.4 eingeführten WeakRefs dar. Sowohl WeakRefs als auch WeakMaps sorgen für eine ressourcenschonende Nutzung von Objekten, denn sie können dazu verwendet werden, Objekte zu löschen, falls sich nur noch der Cache auf die Entitätsklassen der Objekte bezieht. Beispielsweise:
# WeakMap
class FooBar
{
private WeakMap $cache;
public function getSomethingWithCaching(object $obj)
{
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
}
// ...
}
Sonstige Neuerungen durch PHP 8.0
- Die PHP-Klasse static wird in PHP 8.0 wie self & parent zu einem validen Return Type.
- Statt per get_class()können Objekten nun mittels ::class eine Klasse zugewiesen werden, das verschlankt den Quelltext.
- Stringable interface implementiert eine Schnittstelle nun automatisch statt zuvor manuell. Das funktioniert bei allen Strings und bei __toString().
- DateTime und DateTimeImmutable lassen sich nun ineinander konvertieren. Neu: DateTime::createFromInterface() und DatetimeImmutable::createFromInterface().
- Division durch 0, fdiv macht’s möglich. Dies führt zu den Rückgabewerten INF, -INF oder NAN.
- Type annotations: PHP 8 erhält korrekte Typenannotationen für interne Funktionen und Methoden.
- Type errors: Fehler interner Funktionen, die bis dato nur zu Warnungen und zur Ausgabe von null führten, werden nun auch als TypeErrors ausgegeben. Auch andere Fehler erhalten nun eine aussagekräftige Fehlermeldung statt einer Warnung oder einem Hinweis (Reclassified engine warnings). Fehler, die bis dato keine Kennzeichnung erhalten und ignoriert wurden, führen mit PHP 8.0 nun zur Ausgabe von E_ALL, E_NOTICE oder E_DEPRECATED.
- Fatal errors können nicht mehr mit @ unterdrückt werden. Stattdessen sollte auf dem Server display_errors=Off eingerichtet werden.
Muss ich etwas unternehmen?
Wenn Sie von der hervorragenden Performance von PHP 8.0 profitieren und wie zdrei.com immer das Beste rausholen möchten, dann sollten Sie jetzt handeln. Erst recht, wenn Sie noch die veraltete PHP Version 7.2 verwenden; denn – wie eingangs bereits erwähnt – lief der Security Support von PHP 7.2 bereits am 30. November 2020 aus. Aus diesem Grund werden Hoster diese Version in Kürze nicht mehr unterstützen und Ihre Webseite geht offline. Im Rahmen unserer Continuous Upgrading Angebote sind übrigens auch solche Updates enthalten. Sprechen Sie uns an.