【问题标题】:PHP - How share settings across multiple child classes and instantiate those shared settings once?PHP - 如何跨多个子类共享设置并将这些共享设置实例化一次?
【发布时间】:2012-03-09 21:08:14
【问题描述】:

假设我有 3 个 PHP 类:ShedBuilder、HouseBuilder 和 TableBuilder 以及以下代码:

$worker_1 = new ShedBuilder(); // I only know how to build a shed
$worker_2 = new HouseBuilder(); // I only know how to build a house
$worker_3 = new TableBuilder(); // I only know how to build a table

$worker_1->build();
$worker_2->build();
$worker_3->build();

我希望 worker_1、worker_2 和 worker_3 类各自共享相同的工具集来完成工作,例如,我希望所有 3 个工人都使用可用的工具,在本例中是锤子、螺丝刀、钉子等。但是 worker_1建棚子,worker_2 建房子,worker_3 建桌子。

设置工具集一次,然后让 3 名工人中的每一个都知道如何访问他们工作所需的工具的最佳方法是什么?

我曾想过让 Shed/Table/House 构建器每个都从父类 Builder 扩展,但这意味着当我实例化每个构建器时,我必须为每个构建器提供工具集:

$toolset = new Toolset();
$toolset->addTool('hammer');
$toolset->addTool('screwdriver');
$toolset->addTool('nails');

$worker_1 = new ShedBuilder($toolset);
$worker_2 = new HouseBuilder($toolset);
$worker_3 = new TableBuilder($toolset);

我宁愿将工具实例化一次,然后让所有 3 个工人/班级了解工具集并分别构建他们的每个项目。

在 PHP 中实现我想要做的事情的最佳方式是什么?

【问题讨论】:

  • 是的,将工具集作为依赖项注入正是您想要的。您在实施时遇到具体问题吗?
  • 实施不是问题,由于某种原因,它似乎不是“最佳”或“最优化”的构建方式,但您的评论是很好的保证,我将继续执行此实施.

标签: php class settings parent


【解决方案1】:

您已经拥有的,实例化 Toolset 并在其构造函数中为每个工作类提供 $toolset,称为 Dependency Injection,,它实际上是大多数时间处理此任务的首选方式。

可以通过创建一个单例Toolset 对象来完成它,但是当依赖注入以一种整洁且易于测试的方式处理它时,这是不必要的。

【讨论】:

  • 优秀的描述和维基百科链接,有帮助。
【解决方案2】:

我认为为这 3 个构建器类使用父类,并在父类中为工具集使用静态变量就可以了。 Check this page 用于静态变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2010-11-23
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多