与 return 类型和 SOLID 的接口

Interfaces with return types and SOLID

自 PHP 7 发布以来,我一直在重温 SOLID 原则。特别是 Liskov substitution principle 的想法,简而言之,它指出 class 的任何扩展都应该能够在其父 class 可以使用的任何地方使用。

此原则的一部分是针对接口进行编码,因此您的方法定义了要遵守的契约。但是,在 PHP 5 及以下版本中,return 类型不存在。因此,尽管您必须将相同的参数类型传递给使用接口的方法,但您可以 return 任何您喜欢的旧类型。对于大型项目,这使得遵守这一原则比其他语言更难。

我还没有安装 PHP 7 来测试它,我也没有在 PHP 手册或任何宣传新功能的博客网站上看到任何文档。

在 PHP 7 中 接口 是否可以使用 return 类型?

是的,他们是。

PHP 7 adds support for return type declarations. Similarly to argument type declarations, return type declarations specify the type of the value that will be returned from a function. The same types are available for return type declarations as are available for argument type declarations.

PHP Documentation

这个问题似乎有点混乱?无论如何,@Jarrid 发布的 link 包含了我错过的信息,似乎完全回答了我的好奇心。

Declaring return types has several motivators and use-cases:

  • Prevent sub-types from breaking the expected return type of the super-type, especially in interfaces