Невозможно использовать стрелочную функцию с хинтингом типа return void - PullRequest
0 голосов
/ 06 августа 2020

Использование стрелочных функций в php 7.4 с возвращаемым типом hinting void приводит к php фатальной ошибке. Я думаю, что что-то упускаю. Можете ли вы мне помочь.

Пример 1:

<?php

function returnvoid(): void {
    echo 'I am here, but do not return anything aka void';
}

$arrow_function = fn(): void => returnvoid();

$arrow_function();

приводит к

PHP Fatal error:  A void function must not return a value in [my_filesystem]/.config/JetBrains/PhpStorm2020.1/scratches/scratch_3.php on line 7

также Пример 2:

<?php

$f = fn(): void => 1;

бросает то же самое Исключение. Я понимаю, что в примере 2 возникает исключение, потому что это неявный возврат. Как это для явного вызова метода / функции с хинтингом типа void return?

Почему? Я хотел бы указать c в возвращаемых типах. Облегчает жизнь с помощью ide и отладки.

Нельзя ли вернуть void в стрелочных функциях? Я что-то упускаю? Разве это не задокументировано?

1 Ответ

1 голос
/ 07 августа 2020

Стрелочная функция предназначена для того, чтобы сделать синтаксис более лаконичным для замыканий с одним выражением. Она может иметь только одно выражение, return.

Обычно используется в такие функции, как array_map или array_filter, поэтому использование стрелочной функции с типом void невозможно и также не имеет смысла (вы уже создали функцию returnvoid).

Для вашей цели вы все еще может использовать анонимные функции

function returnvoid(): void {
    echo 'I am here, but do not return anything aka void';
}

$anonymous_function = function() : void {
    returnvoid();
};

$anonymous_function();
...