在 TYPO3 扩展中实例化对象的推荐方法是什么

What is the recommended way to instantiate objects in TYPO3 extensions

我假设使用 Extbase/Fluid 和 TYPO3 >= 8 进行扩展开发。

据我所知,有 3 种实例化对象的方法:

  1. new() 与经典 PHP(不推荐)
  2. GeneralUtility::makeInstance()
  3. $this->objectManager->get()

我想知道在哪些情况下使用 makeInstanceobjectManager::get 更好。使用 objectManager 可能会有更多的开销吗?

用于领域模型对象和存储库 objectManager->get 是首选。正如您所指出的,它负责注入依赖项。 您将显式实例化的核心中的大多数 类 不使用依赖项注入,因为它们是实用程序和服务,而且它们也应在 extbase 上下文之外使用。

MakeInstancenew 关键字有一些额外的功能。它处理单例并支持 XCLASSing.

特殊的 ::class 常量自 PHP 5.5.0 起可用。当对 PHP < 5.5 的支持被删除时,核心开始使用它。