Neue PHP Version 8.1 bei hosting.de

Neue PHP Version 8.1 bei hosting.de

Rund ein Jahr nach dem großen Sprung von PHP 7 auf PHP 8 steht nun die nächste Version PHP 8.1 bei hosting.de zur Verfügung. Wieder einmal haben die PHP Entwickler an der Performance geschraubt und sie weiter gesteigert. Es kommt natürlich immer auf den PHP Code selbst an, wie sehr sich die Leistung steigern lässt, dennoch haben die PHP Entwickler an der ein oder anderen Stelle erneut die Leistung ordentlich steigern können. Insbesondere die OPCache Erweiterung hat durch Inheritance cache fünf bis acht Prozent an Performance gewonnen. Es lohnt sich also immer mehr, auch entsprechende Caching Funktionen von PHP zu nutzen. Für Wordpress gibt PHP.net einen Performancegewinn von 3,5% gegenüber PHP 8.0 an, für die Demo des Symfony Frameworks sogar 23%.

Mit dem Release von PHP 8.1 ändert sich auch etwas für ältere Versionen: PHP 7.3 erhält keine Sicherheitsupdates mehr. Kunden, die diese Version einsetzen, empfehlen wir die Umstellung auf eine neuere Version.

Wir möchten Euch einige Neuerungen von PHP 8.1 mit diesem Blogbeitrag näher bringen und erläutern.

NULL Werte bei internen Funktionen sind deprecated

Interne PHP Funktionen erlauben, einen NULL Wert zu übergeben, obwohl das Argument nicht NULL sein darf. Bei eigenen Funktionen wurde hierbei schon ein Fehler geworfen. Die PHP Entwickler gleichen hier die internen Funktionen langfristig an das Verhalten eigener Funktionen an. PHP 8.1 wird daher in einem solchen Fall eine deprecated Warnung ausgeben. In kommenden PHP Versionen kann man daher davon ausgehen, dass hier ein harter Fehler geworfen wird.

array_is_list()

Arrays in PHP können beliebig zusammengewürfelt sein. Die Keys der einzelnen Einträge können dabei auch unterschiedliche Typen sein, beispielsweise Integer oder Strings. Am schnellsten ist PHP jedoch, wenn die Keys eines Arrays einfache, aufsteigende Integer sind, bspw. von 0-5. Mit der Funktion array_is_list() kann überprüft werden, ob dies der Fall ist oder nicht. Die Beispiele von php.net erläutern die Arbeitsweise der neuen Funktion auf einfache Art und Weise:

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

Neuer Typ Enum

PHP erhält den neuen Datentyp Enum. Das ist eine Liste von Möglichkeiten, ähnlich wie in einem Dropdown-Liste in HTML. Ein Enum kann dabei so definiert werden:

enum Obst {
	case Apfel;
	case Birne;
	case Banane;
}

Das kann dann beispielsweise in Funktionen verwendet werden:

function waehle(Obst $wahl) {
	// ...
}

Der Parameter der Klasse kann dann nur einen der Werte haben, die vorher im Enum definiert wurden.

Readonly in Klassen

Variablen einer Klasse können nun readonly markiert werden und sind damit nicht mehr ausserhalb der Klasse beschreibbar.

class klasse {
	public readonly string $string;
	public function __construct(string $string) {
		$this->string = $string; // funktioniert, da innerhalb der Klasse
	}
}

$obj = new klasse("bla");
$obj->string = "blub"; // funktioniert nicht mehr

Versucht man dann, diese Variable in einem erzeugten Objekt zu ändern, wird ein Fehler geworfen.

never als neuer Typ

Der never Typ kann als Rückgabe einer Funktion angegeben werden, wenn diese Funktion niemals einen Wert zurückgibt. Das passiert, wenn die Funktion selbst die Ausführung des Programms beendet.

function ende(): never
{
	exit();
}

final als Angabe zu einer Konstante

Definiert man in PHP eine Klasse mit Konstanten, können Kinder der Klasse diese Konstante überschreiben. Das kann nun mit PHP 8.1 verhindert werden.

class Klasse
{
    final public const Wert = "X";
}

Wird diese Klasse dann vererbt, darf die erbende Klasse die Konstante nicht überschreiben, sonst wird ein Fehler geworfen.

class Kind extends Klasse
{
    public const Wert = "Y"; // erzeugt einen Fehler
}

Neue fsync Funktion

Wenn Dateien auf eine Festplatte geschrieben werden, liegen sie meistens nur im Cache des Festplattencontrollers oder der Festplatte selbst. Das physikalische Schreiben auf die eigentliche Scheibe oder den Chip der Festplatte dauert dann noch einen Augenblick. Mit fsync kann PHP nun sicherstellen, dass eine Datei auch persistent auf die Festplatte geschrieben wird.

$file = fopen("test.txt", "w");
fputs($file, "Some content");
fsync($file);
fclose($file);

Weitere Informationen

Daneben gibt es viele weitere Änderungen. Weitere Informationen zu PHP findest Du auch direkt bei PHP.net: https://www.php.net/releases/8.1/en.php

Hinweise, was man bei einer Umstellung auf PHP 8.1 beachten muss, liefert folgende Seite: https://www.php.net/manual/en/migration81.php
Hier werden noch einmal alle Breaking Changes sowie abgekündigten Features (deprecated) aufgelistet.

Next: Verschlüsselte Signal Backups automatisch in Deiner Nextcloud sichern hosting.de Blog 25.11.2021