PHP7: 标量返回类型声明不应该接受整型吗?

6

我正在实现一个迭代器接口,如果我实现它返回标量值(遵循参考 http://php.net/manual/zh/class.iterator.php),那么我会收到以下错误:

TypeError:Collection::key() 的返回值必须是标量类型的实例,而目前返回了整数。

类的实现:

class Collection implements \Iterator
{
    public function key(): \scalar
    {
        return key($this->colecao);
    }
    // other methods implementations...
}

根据PHP参考文档,整数应被视为标量值(http://php.net/manual/en/migration70.new-features.php):
标量类型声明有两种风格:强制(默认)和严格。现在可以强制或严格地执行以下参数类型:字符串(string),整数(int),浮点数(float)和布尔值(bool)。
我的代码中是否有错误,还是这是一个bug?
感谢您的解释!

你需要的是 public function key(): int。你必须指定它返回的标量类型。 - Don't Panic
返回类型只能是http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.types 我从未听说过标量这样的东西。 - RiggsFolly
PHP文档中显示的类型并不是您可以在代码中使用的真实类型,它们只是用于描述给人类读者。例如,并没有名为“mixed”的类型,它只是意味着函数可以返回多种类型。 - Barmar
@Don'tPanic,谢谢你的帮助。我之前定义方法时加了int作为返回类型,但是没有成功。 - alexandrecintra
1个回答

5

PHP没有称为\scalar的类型。 PHP仅支持这些类型。而你的\scalar类型似乎是另一个类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接