该存储库是 Refactoring.Guru 项目的一部分。
它包含所有经典 GoF 设计模式的 PHP 示例。
每个模式包括两个示例:
概念示例显示了模式的内部结构,包括详细的注释。
真实世界的示例展示了如何在真实的 PHP 应用程序中使用模式。
这些示例需要 PHP 7.3 及更高版本,尽管它们可以在旧版本的 PHP 中轻松复制。
这个版本提供了显式的参数和返回类型声明,这有助于更好地理解一些在动态类型语言中不太明显的模式特征。
所有示例都可以通过命令行启动,使用 PHP 可执行文件,如下所示:
php src/Path-to-example/index.php
为了获得最佳体验,我建议使用以下 IDE 来使用示例:
对于这两个在 PHP 应用程序中的实际用途,我没有什么好的想法。如果您在项目中使用过它们,请随时通过发布问题向我提出想法。
客户端是指类的客户端,定义为模式的一部分,它仅仅是给定方法的调用者或给定类的用户。换句话说,它是应用程序代码中使用模式类的部分。
首先看一下概念示例。在那里您将找到模式中每个类、其角色以及与其他类的连接的详细描述。
我感谢任何帮助,无论是简单的拼写错误修复还是全新的示例。只需创建一个分叉,进行更改并提交拉取请求即可。
这是一个风格指南,可以帮助您使更改与项目代码的其余部分保持一致:
所有代码应符合 PSR2 编码风格指南
尝试将代码硬包装在第 80 个字符处。它有助于在没有滚动条的情况下在网站上列出代码。
示例应匹配以下命名空间约定:RefactoringGuru{pattern-name}{example-name}。例如:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
目标是将所有代码放在一个文件中。是的,我意识到这不是在生产中应该如何完成的。然而,它可以帮助人们更好地理解示例,因为所有代码都适合一个屏幕。
评论中可能有也可能没有语言标签,例如:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
此表示法有助于将代码保留在一个位置,同时允许网站为所有列出的语言生成单独版本的示例。不要害怕并忽略此类评论的非英语部分。如果你想改变这样的评论中的某些内容,那就去做吧。即使您做错了,我们也会在 Pull Request 期间告诉您如何修复它。
本作品根据 Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License 获得许可。
作者:Alexander Shvets (@neochief) 和 Alexey Pyltsyn (@lex111)