我相信您应该问构造函数中该对象需要什么:new YourObject($dependencyA, $dependencyB);
您可以 手动 ($application = new Application(new MessageHandler()
)提供所需的对象(依赖项)。但是您也可以使用 DI框架 (维基百科页面提供了指向PHP DI框架的链接。
重要的是,您仅传递您实际使用的内容(调用操作),而不传递您仅传递给其他对象的内容,因为它们需要它们。
关于Flavius解决方案的更多想法。我不希望这个帖子成为反帖子,但我认为重要的是要弄清为什么依赖注入至少在我看来比全局变量更好。
即使这不是“真正的” Singleton实现,我仍然认为Flavius弄错了。全球状况不好。请注意,此类解决方案还使用难以测试的静态方法。
我知道很多人会这样做,批准并使用它。但是阅读Misko Heverys的博客文章(一位Google可测试性专家),重新阅读它并慢慢地消化他所说的内容确实改变了我对设计的看法。
如果您希望能够测试您的应用程序,则需要采用其他方法来设计应用程序。当您进行测试优先编程时,您将遇到如下困难:’接下来,我想在这段代码中实现日志记录;让我们先编写一个记录基本消息的测试”,然后提出一个强制您编写和使用不可替代的全局记录器的测试。
我仍然在努力地从博客中获取所有信息,并且实施起来并不总是那么容易,而且我有很多问题。但是,在我掌握了Misko Hevery所说的话之后,我无法回到以前做过的事情(是的,全局状态和Singletons(大S)):-)