Analyse

Artikel merken

PHP 8.1 ist da: Das sind die wichtigsten Neuerungen

Die Veröffentlichung on PHP Version 8.1 bringt eine Menge neuer Features, Performance-Verbesserungen, Änderungen und Deprecations. Wir haben die Neuerungen für euch zusammengefasst.

3 Min. Lesezeit

Das Logo von PHP ist ein Elefant. (Foto: Volodymyr Burdiak/Shutterstock)

PHP ist mittlerweile 26 Jahre alt. Die Programmiersprache dominiert weite Teile des Webs. Trotz des beachtlichen Alters wird die Programmiersprache regelmäßig weiterentwickelt: Vor fast genau einem Jahr wurde die Major Version 8 veröffentlicht, jetzt kommt mit Version 8.1 ein weiteres Update mit vielen neuen Features.

Neuer never-Rückgabetyp

Sogenannte return types – oder Rückgabetypen – beschränken den Rückgabetyp des Werts, der von einer Methode zurückgegeben wird. PHP 8.1 erlaubt mit never einen neuen Rückgabetypen. Wer eine Funktion mit dem never -Keyword versieht, definiert damit quasi, dass die Funktion entweder nie einen Wert und stattdessen eine sogenannte Exception zurückgibt oder alternativ die Funktion mit einem Exit-Call beendet. Der darin verbleibende Code wird dann nicht ausgeführt.

function no_value_returned(string $params): never {
... // code
exit();
}

Wenn die Funktion keine Exception zurückgibt oder sie nicht beendet wird, wirft PHP eine sogenannte TypeError-Exception:

// Type Error
TypeError: dispatch(): never-returning function must not implicitly return

Readonly-Properties

Die Property einer Klasse, die als readonly deklariert wurde, kann nur ein einziges Mal initialisiert werden. Weitere Änderungen sind dann nicht mehr möglich.

Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

class Dog {
public readonly string $dna;
public function __construct(string $dna) {
$this->dna = $dna;
}
}
$dog = new Dog("...");

Sie können nur von innerhalb der Klasse – im Beispiel der Klasse Dog – gesetzt werden, entweder innerhalb eines Constructors oder einer anderen Methode. Nicht typisierte Properties können nicht als readonly deklariert werden, das Keyword funktioniert nur bei typisierten Properties. Im oben stehenden Beispielcode ist die Property $dna ein String. readonly ist ein reserviertes Keyword, erlaubt aber dennoch die Deklaration von Funktionen mit dem Namen readonly, weil einige PHP-Frameworks, darunter WordPress, ihre eigenen readonly-Funktion deklarieren.

Enums

Die neue PHP-Version unterstützt sogenannte Enumerations, kurz Enums. Ein Enum ist ein mit einer Zahl versehener Typ, der eine feste Anzahl möglicher Werte hat. Ein Enum namens Status sieht so aus:

enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}

Enums repräsentieren eine Collection oder Sammlung kostanter Werte. Diese Werte – oder Values – können typisiert werden:

class BlogPost
{
public function __construct(
public Status $status,
) {}
}

Das enum Status kann jetzt an die Klasse BlogPost übergeben werden:

$post = new BlogPost(Status::DRAFT);

Enums können Methoden definieren, ähnlich wie Klassen. Auch können sie – wie Klassen – sogenannte Interfaces implementieren. Die Neuerung im Detail beschrieben hat Brent Roose in einem Blogpost.

Neue array_is_list-Funktion

Die neue array_is_list-Funktion gibt einen Wert vom Typ Boolean – also entweder true oder false – zurück. Die Funktion überprüft, ob der übergebene Array eine semantische Liste von Werten darstellt. true wird zurückgegeben, wenn das zutrifft, alle Keys des betreffenden Arrays vom Typ integer sind, die Liste bei 0 anfängt und es keine Lücken zwischen den Werten gibt. Auch bei einem leeren Array gibt die array_is_list-Funktion true zurück.

array_is_list([]); // true
array_is_list([1, 2, 3]); // true
array_is_list(['text', 2, 3]); // true
array_is_list(['text', 'sentence']); // true
array_is_list([0 => 'text', 'sentence']); // true

Sind die Keys implizit, geht PHP davon aus, dass sie bei 0 starten und dass es integer-Keys sind. Deutlicher wird das bei einem Blick auf Arrays, bei denen array_is_list false zurückgeben würde:

// Key does not start with 0
array_is_list([1 => 'text', 'sentence']); // false

// Keys are not in order
array_is_list([1 => 'text', 0 => 'sentence']); // false

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

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

Fibers

Fibers sind ein Mechanismus, um parallel ablaufende Vorgänge zu ermöglichen. Ihr werdet sie wahrscheinlich nicht direkt selbst in euren PHP-Anwendungen verwenden, aber Frameworks wie Amphp oder ReactPHP greifen darauf zurück.

$fiber = new Fiber(function (): void {
$valueAfterResuming = Fiber::suspend('after suspending');

// …
});

$valueAfterSuspending = $fiber->start();

$fiber->resume('after resuming');

Array-Unpacking funktioniert jetzt auch mit string-Keys

Sogenanntes Array-Unpacking gibt es bereits seit PHP 7.4, allerdings funktionierte das Feature bis dato nur mit nummerischen Keys. Bisher wurden Keys vom Type string nicht unterstützt, weil es keinen Konsens darüber gab, wie Array-Duplikate zusammengeführt werden sollen. Das Team um PHP hat dieses Problem schlussendlich gelöst, indem sie dabei der Semantik von array_merge folgen:

$array1 = ["a" => 1];

$array2 = ["b" => 2];

$array = ["a" => 0, ...$array1, ...$array2];

var_dump($array); // ["a" => 1, "b" => 2]

Weitere Neuerungen und Breaking Changes

Daneben bringt PHP 8.1 eine ganze Reihe weiterer Neuerungen, darunter sogenannte intersection-types, zwei neue Funktionen namens fsync und fdatasync, Performanzverbesserungen sowie ein neues final-Keyword, das das Überschreiben von Klassenkonstanten bei der Vererbung verhindert. Zudem bringt Version 8.1, trotz dass es sich dabei um einen Minor-Release handelt, wohl einige kleinere nicht abwärts kompatible Änderungen und Deprecations mit sich. Wer auf die neue Version migriert, findet im zugehörigen Migration-Guide sowie in den PHP-Wikipages alles Wissenswerte darüber zum Nachlesen.

Das könnte dich auch interessieren

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Digitales High Five
Holger Schellkopf (Chefredakteur t3n)

Anleitung zur Deaktivierung

Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder