无法使用返回void类型提示的箭头函数

3

在php 7.4中,使用带有返回类型提示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

另外一个示例:

<?php

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

抛出相同的异常。我理解,示例2会抛出异常,因为它是隐式返回。对于带有void返回类型提示的方法/函数进行显式调用如何处理?

为什么?我想在返回类型上具体说明。这样做可以方便ide和调试。

箭头函数中不能返回void吗?我是否漏掉了什么?这是否有文档说明?


不要使用箭头函数来定义void,因为它们的本意是返回某些东西。 - TimTIM Wong
1个回答

6

箭头函数旨在使单表达式闭包的语法更加简洁。它只能有一个表达式,即return

通常在像array_maparray_filter这样的函数中使用箭头函数,因此使用带有void类型的箭头函数是不可能的,也没有意义(您已经创建了returnvoid函数)。

对于您的目的,仍然可以使用匿名函数

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

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

$anonymous_function();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接