无效为 return 类型

Void as return type

我正在用 PHP 测试 return 类型 7.

我创建了一个简单的脚本来测试 return 类型的 PHP 7:

<?php

Class Obj {

    public function __construct(){

    }

    public function test(): string { //a string needs to be returned
        return "ok";
    }

}

function foo(): Obj { //instance of Obj needs to be returned
    return new Obj();
}

$o = foo();
echo $o->test(); // output: ok

现在在其他编程语言中,当您指定 return 类型 void 时,这意味着您不能 return 任何内容,否则您会收到错误消息。所以我写了这个脚本:

<?php

    function foo(): void {

    }

    foo(); 

现在在上面的脚本中,预期的输出是空的。 相反,它给了我一个致命错误:

Fatal error: Return value of foo() must be an instance of void, none returned on line 2

我的问题是(没找到),在PHP 7中会不会有类似的void类型?

php 中没有 void 的等效类型, return 空;可能符合您的要求,因为它没有任何类型,如 0 或任何其他值。注:实际void表示没有return.

编辑:

针对 void return type 的新的单独 RFC 已发布,已通过投票,并在 PHP 7.1 中实施。
PHP 中现在有一个 void return 类型。 :)

原文Post:

取自wiki.php.net:

Future Work

Ideas for future work which are out of the scope of this RFC include:

  • Allow functions to declare that they do not return anything at all (void in Java and C)

因此目前无法声明您没有return任何东西。
我不知道在你的情况下什么是最好的,但我可能暂时不声明 return 类型。

要回答您的问题是否会有 void return 输入 PHP 7:
目前还没有保证,但我认为很可能void或同义词会以某种方式实现。

编辑:在 PHP 7.1 中有一个 void 伪类型。它在 Void Return Type RFC 中定义。以下是 7.1 之前的答案。


return 的作者在此处键入 RFC。在 PHP 7.0 中不会有 void return 类型,因为 the RFC 没有添加它,也没有任何其他针对 PHP 7.0.[=24 的 RFC =]

类型 void 可以存在于 PHP 7 系列中,如果我们决定为次要版本添加新的 key/reserved 词是可以的,即使它们会破坏代码。这有点不确定,但它是在 PHP 5.4 中使用 callable 关键字完成的。


就我个人而言,我认为我们不需要void;我们已经 nullFrom the manual:

The special NULL value represents a variable with no value. NULL is the only possible value of type null.

在 PHP 中,不 return 任何内容的函数将隐式 return null。这意味着你不可能实际上 return什么都没有*。采用 null 路线意味着自 null will not be a valid class/interface/trait name starting in PHP 7.0 以来没有向后兼容性中断,并且不添加任何新密钥或保留字。

*熟悉 Zend Engine 的人会意识到你可以 return 什么都不做,但是如果你什么都不做 return 你正在分配的变量将被分配 null,这使它们在逻辑上等价。

voidreturn 类型已被 php 7.1 接受。所以以后会来的。

有关其工作原理的一些示例:

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

function returns_null(): void {
    return null; // Fatal error: A void function must not return a value
}
function lacks_return(): void {
    // valid
}
function returns_nothing(): void {
    return; // valid
}

有关详细信息,请参阅 RFC from Andrea Faulds

@BeNice 我理解你的意思,无论如何我总结了来自 Levi Morrison 作为可持续性的一个实际问题:引入 void 作为可能的 return 类型 事实上,我们打破了 null 唯一可能的类型是 null 的假设。

这样,void 应该 return 用于 null 的类型检查,通过设计更改体系结构约束并导致向后兼容性混乱。

// your choice implies this comparison should be true:
gettype(null) === void;

我认为在他的代码中不经常使用 null 的人会承担 void 类型的实现。