1

我正在尝试将我的网站组件移动到类中。例如,下面的这个片段需要在多个文件中使用,但我不想复制和粘贴代码。

<?php
...
require "ActionManager.php";
require "Action.php";
require "includes/pdo.php";

$actionMan = new ActionManager();
$actionMan->setPDO($pdo);
$actionMan->setUserData($data);
echo $actionMan->getActions(3);
?>

好的,我知道我可以使用 spl_autoload_register() 来摆脱前两个要求,但我认为我正在寻找的是某种依赖容器,这样我就不会最终重复这段代码,并且把自己搞砸了当它改变时。

此外,我发现自己在很多类中重复 setPDO() 和 setUserData() 方法。

有人可以指出我正确的方向吗?

4

1 回答 1

1

这些require语句不应该在那里,而是自动加载您的依赖项。Anthony Ferrara 有一篇关于自动加载的成本和收益的很好的博客文章,他总结说,总体而言,自动加载是最好的解决方案。

对我来说,您的其余代码看起来有点像引导代码。您创建一个新实例ActionManager并通过 setter 方法注入两个依赖项。如果这确实是依赖层次结构顶层的引导代码,则可以使用new. 我不喜欢的事实是,显然您的依赖项是在所需文件中创建的,而您无法说出是否已经需要这些实例(没有延迟实例化的选项)。

根据您的整个应用程序,您可能想要考虑使用 DIC,但我不太喜欢它们。您可以在没有 DIC 的情况下进行正确的构造函数注入。实际上,大多数情况下人们最终会错误地使用 DIC 并重新创建 DI 应该解决的问题。

如果您要向我们展示更多您的架构,我们也许可以就如何处理常见依赖项提供更具体的建议。

于 2012-11-17T21:35:32.677 回答