PHP7 无效返回类型不起作用


php7 void return type not working?

我对 php7 中的返回类型有问题,特别是"void"。

它适用于所有其他类型的,整数,字符串,空值,布尔值,类对象。

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

注意:我运行的是 PHP 7.0.3

这是代码:

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

错误消息是:

Uncatch 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} 在第 86 行抛出/var/www/html/src/HttpRequester.php

void 返回类型适用于 PHP 7.1(当您询问此问题时尚未发布)。来自 RFC

版本: 0.2.1
日期: 2015-02-14 (v0.1, 后撤销), 2015-10-14 (v0.2, 复兴)
作者:安德里亚·福尔兹,ajf@ajf.me
状态:已实施 (PHP 7.1)

我刚刚在这里找到了答案:https://wiki.php.net/rfc/void_return_type

这将是 PHP 7.1 中的一个功能

不,直到 PHP 7.1 之前没有。对于 PHP 7.0,您必须完全省略void函数/方法的返回类型。

function printLn($a) {
    echo "$a'n";
}

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

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

添加了对新的空返回类型的支持。它要求函数不返回任何值。

这是 PHP 7.1 的正确语法

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

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

我们保留当前的类型选项。过去的提案提出了新的类型,如 void、int、string 或标量;此 RFC 不包含任何新类型。请注意,它允许将 self 和 parent 用作返回类型。 ...

未来工作

超出本 RFC 范围的未来工作想法包括

  • 允许函数声明它们根本不返回任何内容(在 Java 和 C 中为 void)

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

tl;dr

返回类型 void 从已经可用的 PHP 7.1 开始工作。

工作语法为:

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