PHP 8.1: Návratový typ ‚never‘

PHP

POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.

V původním RFC se typ jmenoval „noreturn“, ale po dalším hlasování došlo ke změně na „never“.

Říká funkci nebo metodě, že nedojde k žádnému návratu. Buď tedy vyvolá výjimku nebo ukončí běh.

Rozdíl mezi void a never je, že void funkce/metody nevrací žádnou hodnotu, ale u never ani k žádnému návratu nedojde.

Typickým příkladem může být tato funkce, které vyvolá přesmerování a ukončí běh:

<?php
function redirect(string $uri): noreturn {
    header('Location: ' . $uri);
    exit();
}

Pokud nedojde k ukončení běhu nebo k vyvolání výjimky, tak (například) tato funkce vyvolá výjimku TypeError:

<?php
function foo(): never {
    return;
}
foo(); // Dojde k vyvolání výjimky TypeError 

Typ never je pouze návratový typ a nejde použít nikde jinde.

Taková perlička: Jedním z autorů této úpravy PHP je Ondřej Mirtes :)

Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)

Komentáře