Was ist neu mit PHP 8.1?

10.05.2022

Wir haben für dich einige Änderungen, die mit PHP 8.1 kommen, zusammengetragen. Auch wenn 8.1 kein Major Release ist, können Änderunge am Code notwendig sein. Mehr dazu findest du auf php.net. Hinweis für WordPress: PHP 8.1 ist noch nicht mit WordPress 5.8 kompatibel.

Performance

PHP 8.1 bringt wieder Performance-Verbesserungen mit. Beispielsweise wurden Performance-Verbesserungen am Opcache vorgenommen. Der „Inheritance Cache“ verknüpft alle eindeutig abhängigen Klassen (z.B.: Methoden, Traits, Schnittstellen) miteinander, die zuvor separat kompiliert werden mussten. Im Opcache shared memory werde diese zwischengespeichert. Das Feature kann ohne Änderung am Programmcode verwendet werden und führt zur Verbesserung der Performance (nicht geprüfte Expertenmeinung: + 3.5% bei Wordpress).

Fibers

Fibers sind hauptsächlich für Framework-Entwickler gedacht, die eine Low-Level-Schnittstelle benötigen. Mit der PHP-Klasse Fibers kannst du ausgewählte Teile deines Programmes isoliert starten, anhalten oder beenden. Mit „/Fiber“ ist die Implementierung einer Fiber möglich, also eines Codeblockes, der über einen eigenen Stack verfügt.

Fiber wird über den Main-Thread gestartet. Dabei kann er bei der Ausführung nicht von diesem unterbrochen werden. Wurde eine Fiber angehalten oder beendet, dann kann ihr Neustart ebenfalls nur über den Main-Thread initiiert werden.

never Return Type

Ein neuer Return-Typ hält mit „never“ Einzug in die PHP-Welt. Dieses Keyword gibt an, dass die entsprechende Funktion niemals ein Wert zurückgeben wird. Anstelle einer regulären Beendigung der Funktion wird eine Ausnahme ausgelöst oder ein Call-Exit beendet das Programm.

Wem „never“ etwas bekannt vorkommt, denkst eventuell an „void“, der ebenfalls die Rückgabe eines Wertes blockiert. „Never“ geht allerdings noch einen Schritt weiter und beendet das Programm. Bei „Void“ führt PHP die nächste Anweisung aus.

Neue Funktion array_is_list()

In PHP lassen sich mit einem Array komplexe Strukturen abbilden. So kannst du während der Laufzeit neue Array-Keys hinzufügen und vorhandene verändern. Achtung: diese Flexibilität bringt Performanceprobleme mit sich.

Ein PHP-Array kannst du optimieren, wenn du die Array-Keys durchnummerieren lässt: von 0 bis zur Anzahl der Elemente. Diese Optimierung lässt sich allerdings derzeit schwer umsetzen, da allein die Überprüfung der Keys schon sehr aufwendig ist. Der aktuelle Polyfill für die Funktion ist hier abgebildet:

(Quelle für beide Abbildungen: php.net)

function array_is_list(array $array): bool {
$expectedKey = 0;
foreach ($array as $i => $_) {
if ($i !== $expectedKey) { return false; }
$expectedKey++;
}
return true;
}

Ob eine nummerische Reihenfolge erkennbar ist, prüft man die enthaltenen Array-Keys mit der Funktion „array_is_list“, beginnend beim Wert 0.

array_is_list([]); // true
array_is_list(['apple', 2, 3]); // true
array_is_list([0 => 'apple', 'orange']); // true

// The array does not start at 0
array_is_list([1 => 'apple', 'orange']); // false

// The keys are not in the correct order
array_is_list([1 => 'apple', 0 => 'orange']); // false

// Non-integer keys
array_is_list([0 => 'apple', 'foo' => 'bar']); // false

// Non-consecutive keys
array_is_list([0 => 'apple', 2 => 'bar']); // false

Mit der nativen Implementierung der Funktion könntest du den Code noch performanter umsetzen, da auf diese Weise nicht mehr davon ausgegangen werden muss, dass die Array-Keys einen nichtnumerischen Wert besitzen werden. Damit wird PHP in der Zukunft noch performanter werden.

Tipp: Eine PHP-Array-Liste samt ungeordneten Schlüsseln ist eine potenzielle Fehlerquelle, weil eine strikte Einhaltung der Listenanforderung das A und O ist. Die Funktion array_is_list trägt dazu bei, den Code bezüglich Arrays fehlerfrei zu halten.

Das waren nur ein paar der Änderungen. Alle weiteren Informationen findest du auf der PHP.NET Website.

Diese Webseite verwendet Cookies. Durch die Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu.