Daa*_*aan 42 php return-type void php-7
我用PHP 7测试了返回类型.
我创建了一个简单的脚本来测试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
现在,当您指定返回类型时,在其他编程语言中,void这意味着您无法返回任何内容,否则您将收到错误.所以我写了这个脚本:
<?php
    function foo(): void {
    }
    foo(); 
现在在上面的脚本中,预期的输出是什么.相反,它给了我一个致命的错误:
致命错误:foo()的返回值必须是void的实例,在第2行返回none
我的问题是(我找不到),在PHP 7中会有类似的void类型吗?
Sig*_*uza 59
已经发布了一个针对void返回类型的新单独RFC ,已通过投票,并在PHP 7.1中实现.
现在voidPHP中有一个返回类型.:)
取自wiki.php.net:
未来的工作
未来工作的想法超出了本RFC的范围,包括:
- 允许函数声明它们根本不返回任何内容(在Java和C中为void)
所以目前没有办法声明你不返回任何东西.
我不知道在你的情况下什么是最好的,但我可能只是暂时没有声明返回类型.
回答你的问题是否void在PHP 7中会有一个返回类型:
目前还没有保证,但我认为很可能void或某个同义词将以某种方式实现.
Lev*_*son 17
这里返回类型RFC的作者.在PHP 7.0中,不会有void返回类型,因为RFC没有添加它,也没有任何其他RFC针对PHP 7.0.
void如果我们认为添加新的密钥/保留字对于次要版本是可以的,即使它们会破坏代码,该类型也可以存在于PHP 7系列中.这有些不确定,但它是在PHP 5.4中使用callable关键字完成的.
就个人而言,我认为我们不需要void; 我们已经有了null.从手册:
特殊的NULL值表示没有值的变量.NULL是null类型唯一可能的值.
在PHP中,不返回任何内容的函数将隐式返回null.这意味着你实际上什么都不会返回*.走这null条路线意味着没有向后兼容性中断,因为它null不是从PHP 7.0开始的有效类/接口/特征名称,并且不添加任何新的密钥或保留字.
*熟悉Zend Engine的人会意识到你什么也不返回,但是如果你没有返回任何你分配的变量将被赋值为null,这使得它们在逻辑上是等价的.
在PHP 7.1中将有一个void伪类型.它在Void Return Type RFC中定义.
我个人对此感到很难过,因为RFC作者此前已"退出"并且我已经选择了RFC.接下来我知道它的建议和讨论,她不会等我提出工会类型,如上所述,这将是无效的对应物.那好吧.
acr*_*bat 15
在void返回类型被接受为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
}
有关详细信息,请参阅Andrea Faulds的RFC!