不能使用带有返回 void 类型提示的箭头函数

Posted

技术标签:

【中文标题】不能使用带有返回 void 类型提示的箭头函数【英文标题】:Can not use an arrow function with return void type hinting 【发布时间】:2020-11-27 04:20:18 【问题描述】:

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

还有例子2:

<?php

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

抛出相同的异常。我了解,示例 2 引发异常,因为它是隐式返回。显式调用带有 void 返回类型提示的方法/函数如何?

为什么?我想具体说明返回类型。使用 ide 和调试让生活更轻松。

箭头函数不能返回 void 吗?我错过了什么吗?这没有记录吗?

【问题讨论】:

不要对 void 使用箭头函数,因为它们是为了返回一些东西。 【参考方案1】:

arrow function 旨在使单表达式闭包的语法更简洁。它只能有一个表达式,即return

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

出于您的目的,您仍然可以使用anonymous functions

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


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

$anonymous_function();

【讨论】:

以上是关于不能使用带有返回 void 类型提示的箭头函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]

为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?

如何在不重新绑定 this 的情况下返回一个带有粗箭头函数的对象? [复制]

Python定义函数加入箭头->

需要返回类型的箭头函数的 ESLint 规则

异步箭头函数预期没有返回值