php7 void 返回类型不起作用?

Posted

技术标签:

【中文标题】php7 void 返回类型不起作用?【英文标题】:php7 void return type not working? 【发布时间】:2016-05-30 15:53:22 【问题描述】:

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

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

但是当我使用 void 时,它希望我返回一个对象 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) #1 main 在 /var/www/html/src/HttpRequester.php 第 86 行抛出

【问题讨论】:

尝试添加一个有效的return;。当http_response_code 返回一个值时,它可能会感到困惑并认为正在返回结果 @RiggsFolly 或者可能还没有 void 返回类型这样的东西 :) @RiggsFolly 使用http_response_code(); 很好,你不会返回它是什么。 干脆别用这个功能! 它有助于提高可读性。我刚刚检查过,在 PHP 7.1 中是可能的:wiki.php.net/rfc/void_return_type 【参考方案1】:

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)

【讨论】:

【参考方案2】:

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

这将是 PHP 7.1 中的一个功能

【讨论】:

所以基本上,答案是“还没有,但很快(tm)”【参考方案3】:

没有,直到 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 也不允许作为返回类型。

【讨论】:

【参考方案4】:

tl;dr

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

工作语法是:

<?php
function procedure(): void

//  return 'will not work';


echo procedure();

【讨论】:

以上是关于php7 void 返回类型不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

sh php7安装。剂量不起作用这个脚本!

- (void)keyDown :( NSEvent *)事件不起作用

宽度 100% 和高度 100% 在 chrome 中不起作用

并行运行 PHP5.6 和 PHP7.2 - 切换到 5.6(仅适用于 apache2)不起作用

Firebase auth 和 React Hook - 从钩子返回函数不起作用

自定义后退按钮图像在导航栏上不起作用