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

Posted

技术标签:

【中文标题】PHP7:标量返回类型声明不应该接受整数吗?【英文标题】:PHP7: shouldn't a scalar return type declaration accept integer? 【发布时间】:2017-02-19 08:22:38 【问题描述】:

我正在实现一个迭代器接口,如果我实现它返回标量(遵循参考 http://php.net/manual/en/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)。

我的代码中是否有错误,你会是一个错误吗?

感谢您的解释!

【问题讨论】:

public function key(): int 是您所需要的。您必须指定它返回的标量类型。 返回类型只能是php.net/manual/en/… 没有听说过的标量这种东西 PHP 文档中显示的类型并不是您可以在代码中使用的真实类型,它们只是用于对人类读者进行描述。例如。没有名为mixed的类型,只是表示该函数可以返回多种类型。 @Don'tPanic,感谢您的帮助。我已经将返回类型与 int 放在一起,但没有成功。 【参考方案1】:

PHP 没有称为\scalar 的类型。 PHP 只支持those 类型。你的\scalar 类型看起来像是另一个类。

【讨论】:

以上是关于PHP7:标量返回类型声明不应该接受整数吗?的主要内容,如果未能解决你的问题,请参考以下文章

标量类型与返回值类型声明

PHP M题 20221104

PHP7中我们应该学习会用的新特性

PHP7新特性

浅析PHP7新功能及语法变化总结

PHP7 的新增性能