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 返回类型不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
- (void)keyDown :( NSEvent *)事件不起作用
宽度 100% 和高度 100% 在 chrome 中不起作用
并行运行 PHP5.6 和 PHP7.2 - 切换到 5.6(仅适用于 apache2)不起作用