void(PHP 7.1) - функція нічого не повертає.return;дозволено,return null;- ні.never(PHP 8.1) - функція ніколи не повертає керування: завжди кидає виняток, завершує скрипт чи працює нескінченно.static(PHP 8.0) - повертає екземпляр класу, через який метод викликали (а не того, де він оголошений).
function abortNotFound(): never
{
throw new NotFoundHttpException();
}
function process(?Order $order): void
{
$order ?? abortNotFound();
$order->ship(); // аналізатор знає: тут $order уже не null
}
Навіщо це:
neverдає статичному аналізатору й IDE зрозуміти, що код після виклику недосяжний. Так звужується тип, і зникають хибні попередження «можливий null».staticпотрібен для fluent-інтерфейсів і фабрик у базових класах:Builder::where()у нащадку повертає нащадка, а не базовий клас.voidчесно документує, що результат не варто використовувати.
Усі три перевіряються рушієм: функція з never, яка все ж завершилася, кине TypeError.