PHP7中的void返回类型无法工作?

24

我在php7中遇到了一个返回类型的问题,特别是"void"。

对于所有其他类型,如int、string、null、bool和类对象,都可以正常工作。

但当我使用void时,它期望我返回一个void对象实例,但实际上它不应该期望任何返回值,因为这就是void的用途。

注意:我正在运行PHP 7.0.3

以下是代码:

   public static function setResponseCode(int $code) : void
    {
        http_response_code($code);

    }

错误信息如下:

Uncaught TypeError: CodeBase\HttpRequester::setResponseCode() 的返回值必须是 void 实例,在 /var/www/html/src/HttpRequester.php 的第 86 行,堆栈跟踪:#0 /var/www/html/index.php(103): CodeBase\HttpRequester::setResponseCode(500) #1 {main} 引发了异常 in /var/www/html/src/HttpRequester.php on line 86


1
尝试添加一个有效的 return;。由于 http_response_code 返回一个值,可能会混淆并认为结果已经被返回了。 - RiggsFolly
4
也许(目前)根本就不存在空返回类型,或许可以这么认为 @RiggsFolly。 - PeeHaa
2
@RiggsFolly 使用 http_response_code(); 是可以的,你并没有返回它是什么。 - Andrea
1
请不要使用这个功能! - Mumen Yassin
1
如果有人动心了,请不要听 @MumenYassin 的可怕建议。请使用返回类型,并更新您的 PHP 版本。谢谢。 - Félix Adriyel Gagnon-Grenier
显示剩余2条评论
4个回答

35

Void返回类型是为PHP 7.1设计的(当你提问时它还未发布)。参考文档

版本:0.2.1
日期:2015-02-14(v0.1,后来被撤回),2015-10-14(v0.2,复活)
作者:Andrea Faulds,ajf@ajf.me
状态:已实现(PHP 7.1)


15

2
基本上,答案是“目前还没有,但很快就会有”。 - apokryfos

8
在PHP 7.1之前是没有的。对于PHP 7.0,您必须完全省略void函数/方法的返回类型。
function printLn($a) {
    echo "$a\n";
}

不幸的是,这个函数/方法没有类型安全性,如果你开始从中返回某些东西,将不会抛出TypeError

幸运的是,PHP 7.1修复了这个问题:

支持添加一个新的void返回类型。它要求函数不返回任何值。

这是PHP 7.1的正确语法:

function should_return_nothing(): void {
    return 1; // Fatal error: A void function must not return a value
}

这是在创建返回类型提示的提案期间推迟的:

我们保留当前类型选项。过去的提案曾建议添加新类型,如void、int、string或scalar;但本RFC不包括任何新类型。请注意,它允许使用self和parent作为返回类型。 ...

未来工作

本RFC范围之外的未来工作想法包括:

  • 允许函数声明它们根本不返回任何东西(Java和C中的void)

NULL也不被允许作为返回类型。


0

简而言之

自 PHP 7.1 起,返回类型 void 已经可用。

工作语法如下:

<?php
function procedure(): void
{
//  return 'will not work';
}

echo procedure();

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