Union Types in PHP

Werbung

Ab PHP 8.0 sind Union Types einsetzbar. Damit sind jetzt auch mehrere Definitionen von Datentypen bei Parametern, Eigenschaften und Rückgabewerten möglich. Ab PHP 8.2 sind auch Intersection Types möglich, das Gegenteil von Union Types sind.

PHP vor 8.0:

class User
{
    private mixed $email;

    public function __construct($email = null)
    {
        $this->email = $email;
    }

    public function getEmail(): mixed
    {
        return $this->email;
    }
}

$user = new User();
echo $user->getEmail();

Ich erzeuge hier einen neuen User, der allerdings keine E-Mail-Adresse hat. Egal aus welchem Grund, aber ich habe sie hier nicht. Daher kann $email nur mixed sein, weil es entweder string oder null ist.

Werbung

Mit PHP 8.0 und Union Types ist es dann möglich, mehrere verschiedene Datentypen anzugeben.

class User
{
    private string|null $email;

    public function __construct($email = null)
    {
        $this->email = $email;
    }

    public function getEmail(): string|null
    {
        return $this->email;
    }
}

$user = new User();
echo $user->getEmail();

Es gibt allerdings eine Einschränkung: void ist nicht erlaubt.

Weitere Informationen findest du auch im PHP RFC zu Union Types.