如何在PHP中实例化和重用服务

如何在PHP中实例化和重用服务,php,Php,在JavaEE中,我将使用Spring来实例化和重用我的服务。现在,我已经用PHP创建了一个小框架,使用服务、存储库和DAO来支持我的应用程序 然而,我如何实例化,但更重要的是,重用这些对象,而不必每次实例化一个新对象 刚开始使用单例是很诱人的,但是我的代码很快就会变得一团糟 事实上,我在PHP中使用良好的OO实践和设计模式时遇到了问题。在这方面有什么好的资源吗?我个人一直在PHP中使用单例方法,在我看来,我的代码还不是一团糟。许多其他项目(例如Typo3)使用全局数组存储对象。我不喜欢这种方法

在JavaEE中,我将使用Spring来实例化和重用我的服务。现在,我已经用PHP创建了一个小框架,使用服务、存储库和DAO来支持我的应用程序

然而,我如何实例化,但更重要的是,重用这些对象,而不必每次实例化一个新对象

刚开始使用单例是很诱人的,但是我的代码很快就会变得一团糟


事实上,我在PHP中使用良好的OO实践和设计模式时遇到了问题。在这方面有什么好的资源吗?

我个人一直在PHP中使用单例方法,在我看来,我的代码还不是一团糟。许多其他项目(例如Typo3)使用全局数组存储对象。我不喜欢这种方法,因为数组项很容易被覆盖


但是,如果您使用名称空间并将项目文件排序到文件夹中(如在Java中),那么单例方法是非常干净的。使用
getInstance()
方法比使用
$globalArray['myInstance']

在php中,我们使用了重要的framewokr也使用的延迟加载技术

您需要构建一个自动加载策略,因为在php中,您应该始终包含编写类以实例化对象的文件

Symfony使用名称空间,例如

\DB\Repository\Classes\Product
例如,在

/DB/Repository/Classes/Product.php file
你直接做了一个

$product = new Product()

不考虑包含文件和其他类似的操作。

我相信您正在寻找的是服务容器(IoC容器)。有一些PHP实现可以在应用程序中使用。到目前为止,我使用的是Symfony框架提供的依赖项注入组件。可以找到文档


我知道PHP中还有另一个可用的实现,称为Zend DI。它是由自2.0版以来的另一个大型PHP框架提供的,尽管它仍处于测试阶段。可以找到Zend DI组件的一些示例。

我喜欢这本关于PHP设计模式的书:同意。用于重用已建立对象的工厂/单例模式没有什么错。