---
title: 'PHP 8.1 Out Now!'
slug: php-8-1-out-now
date: '2021-12-04'
author: onlime
tags: [PHP]
image: 'https://www.onlime.ch/uploads/php81-released.png'
---

Der neuste major release **PHP 8.1** ist erschienen und wir konnten die finale Version bereits am 26. November 2021 für alle Kunden freigeben. Mit der offiziellen Ankündigung liessen wir etwas auf uns warten, sofern du unseren [Tweet](https://twitter.com/ondalime/status/1464367384878362631) verpasst hast. Aber wenn es um's Technische geht, dann geben wir Vollgas!

Sämtliche Erweiterungen, welche unter PHP 8.0 verfügbar waren, stehen euch auch bereit unter PHP 8.1.

Die neue Version ist in unserem [Controlpanel](https://my.onlime.ch/) unter **«PHP-Manager»** zu finden und lässt sich sowohl für Ihre Hauptdomain als auch für sämtliche Subdomains individuell aktivieren.

### Neuerungen in PHP 8.1

Die neueste PHP-Version bietet nicht ganz so viel Neues wie der grosse Sprung auf PHP 8 letztes Jahr, aber doch einige Funktionalität, die das Webentwickler-Leben vereinfacht. Dies sind die wichtigsten Neuerungen und Änderungen:

- **[Enumerations](https://www.php.net/manual/en/language.enumerations.php)** – Du kannst nun Enums statt Konstanten für mehr Typensicherheit und direkter Validierung nutzen. Aus unserer Sicht klar das nützlichste neue Feature!
```php
enum Status {
    case Pending;
    case Active;
    case Archived;
}
```
- **[Readonly-Properties](https://wiki.php.net/rfc/readonly_properties_v2)** – Readonly-Properties können nach einer Initialisierung nicht mehr verändert werden. Sie sind ein ideales Werkzeug um Value-Objekte und Data-Transfer-Objekte zu erstellen.
`public readonly string $title`
- **[First-Class Callable Syntax](https://wiki.php.net/rfc/first_class_callable_syntax)** – Durch die sogenannte First-Class Callable Syntax kannst du eine Referenz zu jeder beliebigen Funktion erhalten.
```php
function foo(int $a, int $b) { /* … */ }
$foo = foo(...);
$foo(a: 1, b: 2);
```
- **[`new` in Initialisierungen](https://wiki.php.net/rfc/new_in_initializers)** – Objekte können nun als Default-Wert für Parameter, statische Variablen, Konstanten, so wie als Argument für Attribute genutzt werden. Dies ermöglicht nun auch die Nutzung von verschachtelten Attributen.
```php
    public function __construct(
        private Logger $logger = new NullLogger(),
    ) {}
```
- **[Pure-Intersection-Types](https://wiki.php.net/rfc/pure-intersection-types)** – Nutze die Intersection-Types, wenn du sicherstellen möchtest, dass das übergebene Objekt mehrere Typen implementieren.
```php
function generateSlug(HasTitle&HasId $post) {
    return strtolower($post->getTitle()) . $post->getId();
}
```
- **[Der Rückgabetyp `never`](https://wiki.php.net/rfc/noreturn_type)** – Eine Funktion mit dem Rückgabetyp `never` gibt an, dass sie keinen Rückgabewert besitzt und die Funktion entweder eine Exception wirft oder das Script durch `die()`, `exit()`, `trigger_error()`, oder einer ähnlichen Funktion terminiert wird.
- **[`final` Klassen Konstanten](https://wiki.php.net/rfc/final_class_const)** – Es ist nun möglich Klassen Konstanten als `final` zu definieren, sodass diese in einer Vererbung nicht überschrieben werden können.
- **[Fibers](https://wiki.php.net/rfc/fibers)** – Fibers sind eine grundlegende Funktionalität zur Implementierung von verzahnten Abläufen. Sie sind dazu gedacht Code-Blöcke zu erstellen, die pausiert und wiederaufgenommen werden ähnlich wie die Generator-Implementierung, jedoch von überall aus.
- **[Entpacken von Arrays mit string-basierten Keys](https://wiki.php.net/rfc/array_unpacking_string_keys)** – PHP unterstützte bereits das Entpacken von Arrays mit `int`-basiertem Key in andere Arrays. Jetzt ist es auch möglich Arrays mit einem `string`-basiertem Key oder auch einer Kombination aus beiden Varianten zu entpacken.
```php
$array1 = ["a" => 1];
$array2 = ["b" => 2];
$array = ["a" => 0, ...$array1, ...$array2];
var_dump($array); // ["a" => 1, "b" => 2]
```


Unter **[PHP 8 Released!](https://www.php.net/releases/8.1/)** findet ihr sämtliche neuen Features mit den entsprechenden Links zur Doku resp. RFCs aufgelistet.

Für weitere Infos beachte bitte auch das offizielle Release Announcement und unser Support-Wiki:

* [PHP 8.1.0 Release Announcement](https://www.php.net/releases/8_1_0.php)
* [PHP 8.1.0 Changelog](https://www.php.net/ChangeLog-8.php#8.1.0)
* [Onlime Support-Wiki: PHP](https://wiki.onlime.ch/dev:php)

Weitere sehr empfehlenswerte Artikel:

* [stitcher.io – What's new in PHP 8.1](https://stitcher.io/blog/new-in-php-81)
* [stitcher.io – PHP 8.1: Enums](https://stitcher.io/blog/php-enums)
* [stitcher.io – PHP 8.1 in 8 code blocks](https://stitcher.io/blog/php-81-in-8-code-blocks)
* [PHP.Watch – PHP 8.1: What's New and Changed](https://php.watch/versions/8.1)

### Breaking Changes

PHP 8.1 ist eine neue Major-Version. Das bedeutet, dass einige Änderungen enthalten sind, die mit älterem Code nicht mehr kompatibel sind. Viele der Änderungen sind jedoch bereits seit PHP 8.0 als veraltet markiert, weshalb du mit dem Wechsel auf PHP 8.1 generell keine Probleme haben solltest, wenn du mit den Anpassungen in den vergangenen Versionen vertraut bist. Eine Liste mit allen Breaking Changes findest Du wie gehabt auf der [Upgrade-Seite der PHP Group](https://www.php.net/manual/en/migration81.php).

### Bereit für PHP 8.1?

Aus unserer Sicht spricht nichts gegen den Wechsel auf PHP 8.1. Bisher sind uns keine negativen Effekte aufgefallen und sämtliche grossen CMS und Web-Frameworks sollten problemlos laufen unter PHP 8.1. Einzig die Projekte, welche den grossen Schritt auf PHP 8.0 bis heute verschlafen haben, werden wohl auch nicht ganz so rasch nachziehen und es ist zumindest mit `E_DEPRECATED` Warnungen zu rechnen.

Du kannst ganz einfach testen, ob deine Website lauffähig ist unter dieser neuen Version. Im [Controlpanel](https://my.onlime.ch/) unter **«PHP-Manager»** kannst du die PHP-Version jederzeit up- resp. downgraden.
