Auf unseren Webservern steht ab heute der erste Release Candidate der kommenden PHP Version 8.4 zum Testen zur Verfügung. Die Release Candidate-Versionen von PHP dienen den PHP-Entwicklern zum Aufspüren von letzten Fehlern und Problemen, bevor die finale Version von PHP 8.4 voraussichtlich gegen Ende November erscheinen wird.
Mit dem Release Candidate können Sie testen, ob die von Ihnen genutzten PHP-Anwendungen bereits mit PHP 8.4 kompatibel sind, für den Produktivbetrieb sollten die Release Candidates jedoch aufgrund eventuell sicherheitsrelevanter Fehler nicht genutzt werden. Bis zur geplanten Veröffentlichung von PHP 8.4 werden planmäßig noch 3 weitere Release Candidate-Versionen erscheinen, die wir dann zeitnah auf den Webservern installieren werden.
Neuerungen in PHP 8.4
Die für viele Endanwender wichtigste Verbesserung bei neuen PHP-Versionen ist eine höhere Ausführungsgeschwindigkeit, wir konnten in ersten Tests jedoch keine signifikanten Performance-Unterschiede zwischen PHP 8.4 und der Vorgängerversion 8.3 feststellen.
Eine nützliche Neuerung in PHP 8.4 sind Propery Hooks, dadurch lässt sich redundanter Boilerplate-Code für Get()- und Set()-Methoden reduzieren. Bei folgender Beispielklasse ohne Property Hooks müssen Get()- und Set()-Methoden definiert werden:
class User
{
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
public function setName(string $name): void {
if (strlen($value) === 0) {
throw new ValueError("Name must be non-empty");
}
$this->name = $name;
}
}
Mit Property Hooks lässt die Klasse wie folgt vereinfachen:
class User
{
public string $name {
set {
if (strlen($value) === 0) {
throw new ValueError("Name must be non-empty");
}
$this->name = $value;
}
}
public function __construct(private string $name) {
$this->name = $name;
}
}
Für Arrays gibt es nun 4 zusätzliche Callback-Funktionen array_find()
, array_find_key()
, array_any()
und array_all()
. Beachten Sie dazu folgende Beispiele:
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
// Find the first animal with a name longer than 4 characters.
var_dump(array_find($array, function (string $value) {
return strlen($value) > 4;
})); // string(5) "goose"
// Find the first animal with a name longer than 4 characters.
var_dump(array_find_key($array, function (string $value) {
return strlen($value) > 4;
})); // string(1) "e"
// Check, if any animal name is longer than 5 letters.
var_dump(array_any($array, function (string $value) {
return strlen($value) > 5;
})); // bool(true)
// Check, if all animal names are shorter than 12 letters.
var_dump(array_all($array, function (string $value) {
return strlen($value) < 12;
})); // bool(true)
Eine weitere Neuerung ist die Unterstützung von HTML5 in der DOM Extension, außerdem wurden in der XML Extension Probleme bei der Verarbeitung großer XML-Dateien behoben.
Entfernung veralteter Extensions
Die veralteten PHP-Extensions IMAP und Pspell wurden in PHP 8.4 entfernt, da die Extensions selbst sowie die zugrundeliegenden Softwarebibliotheken veraltet sind und seit Jahren nicht mehr aktualisiert wurden. Als Alternative zu Pspell kann die Extension Enchant genutzt werden.
Da es in PHP 8.4 kaum schwerwiegende nicht abwärtskompatible Änderungen zur Vorgängerversion 8.3 gibt, sollten viele Web-Anwendungen bereits mit PHP 8.4 kompatibel sein.
Eine Übersicht über alle Änderungen und Neuerungen in PHP 8.4 finden sie hier.
PHP 8.4 aktivieren
Sie können PHP 8.4 wie gewohnt über das Kundenmenü oder auf den Webservern per .htaccess-Konfigurationsdatei mittels folgender Direktive auswählen:
AddHandler application/x-httpd-php84 .php
PHP 8.1 End of Life
Mit der gegen Ende November geplanten Veröffentlichung der finalen Version von PHP 8.4 stellen die PHP-Entwickler die Unterstützung der PHP-Version 8.1 vollständig ein, für die PHP Version 8.2 wird es ab dann nur noch Updates bei sicherheitskritischen Fehlern geben. Falls Sie noch eine ältere PHP-Version als 8.2 für Ihre Web-Anwendungen nutzen, sollten Sie diese möglichst bald auf PHP 8.2 oder neuer umstellen.