我对 php7 中的返回类型有问题,特别是"void"。
它适用于所有其他类型的,整数,字符串,空值,布尔值,类对象。
但是当我使用 void 时,它期望我返回对象 void 的实例,但实际上它不应该期望任何返回,因为这就是 void 的用途。
注意:我运行的是 PHP 7.0.3
这是代码:
public static function setResponseCode(int $code) : void
{
http_response_code($code);
}
错误消息是:
Uncatch 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} 在第 86 行抛出/var/www/html/src/HttpRequester.php
void 返回类型适用于 PHP 7.1(当您询问此问题时尚未发布)。来自 RFC
版本: 0.2.1
日期: 2015-02-14 (v0.1, 后撤销), 2015-10-14 (v0.2, 复兴)
作者:安德里亚·福尔兹,ajf@ajf.me
状态:已实施 (PHP 7.1)
我刚刚在这里找到了答案:https://wiki.php.net/rfc/void_return_type
这将是 PHP 7.1 中的一个功能
不,直到 PHP 7.1 之前没有。对于 PHP 7.0,您必须完全省略void
函数/方法的返回类型。
function printLn($a) {
echo "$a'n";
}
不幸的是,你对这个函数/方法没有类型安全,如果你开始从中返回一些东西,就不会抛出TypeError
。
幸运的是,PHP 7.1 修复了这个问题:
添加了对新的空返回类型的支持。它要求函数不返回任何值。
这是 PHP 7.1 的正确语法:
function should_return_nothing(): void {
return 1; // Fatal error: A void function must not return a value
}
在创建返回类型提示的提案期间,这被推迟了:
我们保留当前的类型选项。过去的提案提出了新的类型,如 void、int、string 或标量;此 RFC 不包含任何新类型。请注意,它允许将 self 和 parent 用作返回类型。 ...
未来工作
超出本 RFC 范围的未来工作想法包括:
- 允许函数声明它们根本不返回任何内容(在 Java 和 C 中为 void)
NULL
也不允许作为返回类型。
tl;dr
返回类型 void 从已经可用的 PHP 7.1 开始工作。
工作语法为:
<?php
function procedure(): void
{
// return 'will not work';
}
echo procedure();