PHP 接口的多态性 PHP 标准建议 (PSR)

如前所述,PHP 有许多开源库和框架。每个开发人员在编写代码时都有自己的偏好,每个框架或库都有自己的标准或做事方式。对于 PHP 开发人员来说,这可能会成为一个问题,因为我们往往会使用大量不同的库和框架。

举例来说,从一个框架过渡到另一个框架,但最终却使用了不同类型的服务容器,这可不好玩,因为这将要求您改变组织应用程序依赖关系的方式,因此引入了 PSR-11。服务容器是管理对象实例化(包括其依赖关系)的应用程序—​在实施依赖注入(Dependency Injection 或 DI)时非常方便,第 8 章 "使用 SOLID 原则进行 TDD" 将对此进行讨论。这就是为什么遵循某些特定指南或标准很重要(尽管不是必需)的例子之一,也是 PSR 的用武之地。

什么是 PSR?

PHP 框架互操作性小组 (PHP-FIG) 推荐使用 PSR。他们是一群非常友善的开发人员,他们帮助我们使 PHP 编码生活更有条理。您可以在 https://www.php-fig.org/ 找到有关 PHP-FIG 的更多信息。

以下是目前接受的 PSR

  • PSR-1:基本编码标准

  • PSR-3:Logger 接口

  • PSR-4:自动加载标准

  • PSR-6:Caching 接口

  • PSR-7:HTTP 消息接口

  • PSR-11:Container 接口

  • PSR-12:扩展编码风格指南(已弃用 PSR-2

  • PSR-13:超媒体链接

  • PSR-14:事件分发器

  • PSR-15:HTTP 处理程序

  • PSR-16:简单缓存

  • PSR-17:HTTP 工厂

  • PSR-18:HTTP 客户端

您可以在 https://www.php-fig.org/psr/ 上找到所有目前已被接受的 PSR。起初,最需要熟悉的 PSRPSR-1PSR-12PSR-4。这有助于我们以更一致的风格编写代码,尤其是从一个框架过渡到另一个框架时。我曾经有一个 "最喜欢的" PHP MVC 框架,以为我会一直使用这个框架直到老去—​但和往常一样,我错了。最后,我使用了太多不同的框架,以至于我不再关心我使用的是哪个框架。现在,我对每项具体工作都情有独钟。

PSR 只是 "建议"。但如果你真的想写 PHP 并提高自己代码的质量,我强烈建议你遵循它们。很多人都经历过不遵循标准的痛苦。我曾经编写了自己的依赖注入容器,结果却让我们团队的其他开发人员不知道如何使用它。我只是重新发明了轮子,用了一种糟糕的方式。我多么希望有一个标准可以遵循!对了,现在有 PSR-11 了。

  • 通过开发IDE配置来遵循标准

  • 还是通过提交 Action 来遵循

总结

在本章中,我们定义了什么是 OOP 以及为什么要利用它。然后,我们清楚地定义了 PHP 中的类和对象。然后,我们为 OOP 的四大支柱分别举例说明。我们了解了什么是抽象、封装、继承和多态,以及它们在 PHP 中是如何工作的。我们还简要地介绍了 PSR,因为我们并不只是想发明标准并开始编写代码,我们还想编写出易于理解和维护的简洁的 PHP 代码,尤其是在企业环境中,在这种环境中,你可能会与许多其他开发人员一起工作,而且你的代码在未来几年中都必须具有很好的可读性和可维护性。

本章应该为你开始编写实际的面向对象 PHP 代码做好了准备—​在我们的 TDD 示例项目中,我们将利用 PHP 的 OOP 功能。

在下一章中,我们将讨论单元测试。我们将定义什么是单元测试,以及单元测试在 TDD 中的应用。我们还将介绍不同类型的自动测试。在了解了单元测试的定义后,我们将开始编写第一个单元测试,并开始执行这些单元测试。