nSa*_*Dev 20 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);
}
Run Code Online (Sandbox Code Playgroud)
和错误消息是:
未捕获的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}
rap*_*2-h 14
我刚刚在这里找到答案:https://wiki.php.net/rfc/void_return_type
它将是PHP 7.1中的一个功能
没有,直到PHP 7.1.对于PHP 7.0,您必须完全省略void函数/方法的返回类型.
function printLn($a) {
echo "$a\n";
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,你对这个函数/方法没有类型安全性,TypeError如果你开始从它返回一些内容,就不会抛出任何类型.
幸运的是,PHP 7.1解决了这个问题:
添加了对新的void返回类型的支持.它要求函数不返回任何值.
这是PHP 7.1的正确语法:
function should_return_nothing(): void {
return 1; // Fatal error: A void function must not return a value
}
Run Code Online (Sandbox Code Playgroud)
在创建返回类型提示的提案期间推迟了:
我们保留当前的类型选项.过去的建议提出了新的类型,如void,int,string或scalar; 此RFC不包含任何新类型.请注意,它允许将self和parent用作返回类型....
未来的工作
未来工作的想法超出了本RFC的范围,包括:
- 允许函数声明它们根本不返回任何内容(在Java和C中为void)
NULL 也不允许作为返回类型.