php7 void返回类型不起作用?

时间:2016-02-18 13:00:27

标签: php return-type type-hinting php-7

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

它适用于所有其他类型,int,string,null,bool,类对象。

但是当我使用void时,它希望我返回一个对象void的实例,但实际上它不应该指望任何返回,因为它是什么空的。

注意:我正在运行PHP 7.0.3

这是代码:

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

    }

,错误信息是:

  

未捕获TypeError:CodeBase的返回值\ HttpRequester :: setResponseCode()必须是void的实例,在/var/www/html/src/HttpRequester.php:86中返回无堆栈跟踪:#0 / var / www /html/index.php(103):CodeBase \ HttpRequester :: setResponseCode(500)在第86行的/var/www/html/src/HttpRequester.php中抛出#1 {main}

5 个答案:

答案 0 :(得分:26)

Void返回类型适用于PHP 7.1(当您提出此问题时尚未发布)。 From the RFC

  

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

答案 1 :(得分:14)

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

这将是PHP 7.1中的一项功能

答案 2 :(得分:8)

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

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

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

幸运的是,PHP 7.1 fixes this

  

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

这是PHP 7.1的正确语法

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

这在the proposal that created return type hints期间推迟了:

  

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

     

未来工作

     

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

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

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

答案 3 :(得分:0)

<强> TL;博士

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

工作语法是:

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

echo procedure();

答案 4 :(得分:-4)

为什么不使用

   function printLn($a) {
    echo $a;
    return;}

与虚空相同。

您甚至可以仅使用echo

删除返回