PHP-如何在多个子类之间共享设置并实例化这些共享设置一次


PHP - How share settings across multiple child classes and instantiate those shared settings once?

假设我有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中尝试做的事情的最佳方式是什么?

您已经实例化了Toolset并将$toolset提供给其构造函数中的每个工作类,这被称为依赖注入,实际上在大多数情况下,它是处理此任务的首选方式。

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

我认为对这3个构建器类使用父类,在父类中对工具集使用静态变量就可以了。查看此页面了解静态变量的用法。