Never

never ist ein reiner Rückgabetyp, der anzeigt, dass die Funktion nicht beendet wird. Das bedeutet, dass sie entweder exit() aufruft, eine Ausnahme wirft oder eine Endlosschleife ist. Daher kann er nicht Teil einer Union-Typ-Deklaration sein. Verfügbar seit PHP 8.1.0.

Im Sprachgebrauch der Typentheorie ist never der unterste Typ. Das bedeutet, dass er der Untertyp jedes anderen Typs ist und bei der Vererbung jeden anderen Rückgabetyp ersetzen kann.

add a note

User Contributed Notes 3 notes

up
29
ali1289445 at gmail dot com
3 years ago
<?php

function sayHello(string $name): never
{
    echo "Hello, $name";
    exit(); // if we comment this line, php throws fatal error
}

sayHello("John"); // result: "Hello, John"
up
4
dcfynn at icloud dot com
1 year ago
I think the description should be corrected from return-only to non-return function since the context is now misleading
up
0
harl at gmail dot com
1 day ago
Never cannot be used in a union type because, being the bottom type, it is already automatically a subtype of every other type. "A|never" is equivalent to "A".

When one type is "obviously" a subtype of another (i.e., it doesn't require loading the class definitions of all the types involved), the former is redundant in union types, and PHP flags the union of both as an error.

Similarly for intersection types, where "A&never" means the same thing as "never". It "obviously" doesn't make sense to mention A there, so PHP won't allow doing so.
To Top