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


How to instantiate and reuse services in PHP

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

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

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

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

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

但是,如果您使用命名空间并在文件夹中对项目文件进行排序(如在 Java 中),则 Singleton 方法非常干净。使用getInstance()方法,您比$globalArray['myInstance']更安全

我相信

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

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

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

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

Symfony使用命名空间,例如

'DB'Repository'Classes'Product

例如在

/DB/Repository/Classes/Product.php file

你直接做了一个

$product = new Product()

无需注意包含文件和其他类型的操作。