• Contact us
  • Documentation
  • Login
Watch a demoFree trial
Blog
Blog
BlogProduktFallstudienNachrichtenInsights
Blog

Wichtige Features und Verbesserungen in PHP 8.1

PHP
31 Dezember 2021
Thomas di Luccio
Thomas di Luccio
DevRel Ingenieur
Teilen
Diese Seite wurde von unseren Experten auf Englisch verfasst und mithilfe einer KI übersetzt, um einen schnellen Zugriff zu ermöglichen! Die Originalversion findest du hier.

Nur wenige Tage nach der offiziellen Veröffentlichung freuen wir uns, die sofortige Verfügbarkeit von PHP 8.1 für alle Projekte im Grid-Tarif bekannt zu geben. Die neue PHP-Stiftung veröffentlicht jedes Jahr Ende November eine neue Hauptversion, und das ist für uns Entwickler und Anwendungshersteller so etwas wie ein vorzeitiges Weihnachtsgeschenk.

Neuer Schwung und Beschleunigung

PHP 8.1 bringt viele neue und lang erwartete Features mit sich, wie Enums, Readonly-Eigenschaften, First-Class-Callable-Syntax und new Initialisierer.

Außerdem bietet es einige nette Verbesserungen der Performance, die auf etwa 5 bis 8 % geschätzt werden. Dmitry Stogov, der Autor dieser beeindruckenden Funktion, beschreibt dies als eine neue transparente Technologie, die den Overhead der PHP-Klassenvererbung beseitigt.

Und schließlich könnten Fibers durch die Einführung eines Low-Level-Mechanismus zur Verwaltung von Parallelität nichts Geringeres als einen bahnbrechenden Wandel im PHP-Ökosystem darstellen.

Diese Funktionen und viele weitere sind ab sofort verfügbar. Und du kannst sie noch heute ausprobieren.

Enums

Das ist eine Funktion, auf die ich schon seit Jahren gewartet habe, und ich kann es kaum erwarten, sie zu nutzen, da sie eine so bequeme Möglichkeit bietet, Sammlungen von konstanten Werten zu verwalten.

enum Status {
  case Draft;
  case Published;
  case Archived;
}

Kopiere den Codeausschnitt

class Post
{
    public function __construct(
        private Status $status = Status::Draft;
        // ...
    ) {}

    public function getStatus(): Status
    {
        return $this->status;
    }

    public function setStatus(Status $status): void
    {
        $this->status = $status;
    }
}

$post->setStatus(Status::Active);

Snippet kopieren

Enums können sogar Methoden und Schnittstellen haben. Wie cool ist das denn?

enum Status
{
    // …

    public function color(): string
    {
        return match($this)
        {
            self::Draft => 'grey',
            self::Published => 'green',
            self::Archived => 'red',
        };
    }
}

Snippet kopieren

interface HasColor
{
    public function color(): string;
}

Snippet kopieren

enum Status implements HasColor
{
    // ...

    public function color(): string { /* … */ }
}

Kopiere den Codeausschnitt

Schreibgeschützte Eigenschaften

Klassen-Eigenschaften können als schreibgeschützt markiert werden. Das bedeutet, dass sie nur einmal geschrieben werden können; andernfalls wird eine Ausnahme ausgelöst.

class Post {
    public function __construct(
        public readonly string $title,
        ...
    ) {}
}

Snippet kopieren

$post = new Post(title: ‘PHP 8.1 is available’, /* … */);
// All good, life is great.

$post->title = 'Some other and less fancy title';
// Error: Cannot modify readonly property Post::$title

Snippet kopieren

Syntax für erstklassige Callables

PHP 8.1 führt eine neue Syntax zum Erstellen eines Callables ein. Du kannst nun aus einem Callable eine Closure erstellen, indem du dieses Callable aufrufst und ... als Argument übergeben:

function love(Human $a, Human $b) {
    /* What is love … */
}

$love = love(...);

$love(a: $someone, b: $someoneElse);

Kopiere den Codeausschnitt

new

Diese Funktion ermöglicht eine breitere Verwendung des new Schlüsselworts, das nun in Funktionsdefinitionen als Standardparameter und Attributargumente verwendet werden kann.

Zusammen mit der Constructor Property Promotion, die mit PHP 8.0 eingeführt wurde, kann dies die Größe der Klassen erheblich reduzieren. Weniger Rauschen und mehr Signal: mehr Freiraum für Zen-Entwickler.

class FooController {
    public function __construct(
        private Logger $logger = new BarLogger(),
    ) {}
}

Snippet kopieren

Fibers

Fibers sind ein neuer, low-level Mechanismus zur Vereinfachung der Parallelität. Sie ermöglichen die Erstellung von Full-Stack-Funktionen, die unterbrochen werden können und zur Implementierung von kooperativem Multitasking in PHP genutzt werden. Diese werden auch als „Green Threads“ bezeichnet, da sie Code parallel ausführen, ohne auf eine Multithread-Umgebung angewiesen zu sein.

$catFiber = new Fiber(function (): void {
    // …
    $value = Fiber::suspend('taking a nap');
    echo ‘Cat fiber resuming its activity because of: ‘ . $value;
});

$value = $catFiber->start();
echo ‘Current value from this cat fiber: ‘ . $value;
// Current value from cat fiber suspending: taking a nap

$catFiber->resume(‘some random noise’);
// Cat fiber resuming its activity because of: some random noise

Snippet kopieren

Auch wenn es sich hierbei nicht um echte asynchrone oder multithreaded-Funktionalitäten handelt, könnten Fibers dennoch Neuland für das PHP-Ökosystem erschließen, da sie eine Verschiebung in den historischen Paradigmen von PHP einleiten. Erfahre mehr über Fibers im RFC.

Probier es noch heute aus

PHP 8.1 führt einige grundlegende Änderungen ein, die sich auf älteren Code auswirken können. Du solltest deine Anwendung vielleicht testen, bevor du die PHP-Version aktualisierst. Gute Nachrichten: Das Testen von PHP 8.1 könnte nicht einfacher sein. Erstelle zunächst einen neuen Branch in deinem Repository. Aktualisiere dann deine ./.upsun/config.yaml Datei in diesem Branch und ändere den Schlüssel „type“ in:

type: php:8.1

Kopiere den Codeausschnitt

Git-Commit und deploy: Dieser Branch läuft nun unter PHP 8.1. Probier deine Anwendung aus, führe deine Integrationstests durch und prüfe, ob etwas aktualisiert werden muss. Sobald du die erforderlichen Änderungen vorgenommen hast, füge diesen Branch wieder in deinen Haupt-Branch ein. Herzlichen Glückwunsch, du nutzt nun PHP 8.1 in der Produktivumgebung.

Viel Spaß beim Deployen, PHP!

Bleiben Sie auf dem Laufenden

Abonnieren Sie unseren monatlichen Newsletter.

Ihr größtes Werk
steht vor der Tür

Kostenloser Test