Php 旧项目中的Symfony翻译组件

Php 旧项目中的Symfony翻译组件,php,symfony,Php,Symfony,最近我在做一个非常大的项目,代码主要是用PHP编写的。我正要重构一些代码。在开始重构之前,我决定先编写一些单元测试,以便对不破坏任何东西有信心(尽管这可能会发生…)。在我试图设置PHPUnit的时候,我意识到我要测试的代码充满了在全局名称空间中注册的函数。我决定暂时忽略这一点,并考虑一个方法来模拟这些全局函数 由于该项目在某些地方使用PSR-4,而在其他地方没有名称空间,因此很难绕过这些稀疏耦合的全局函数 我思考解决方案的时间越长,就越意识到需要将这些全局函数重写为更面向对象的方式。我对现有的第

最近我在做一个非常大的项目,代码主要是用PHP编写的。我正要重构一些代码。在开始重构之前,我决定先编写一些单元测试,以便对不破坏任何东西有信心(尽管这可能会发生…)。在我试图设置PHPUnit的时候,我意识到我要测试的代码充满了在全局名称空间中注册的函数。我决定暂时忽略这一点,并考虑一个方法来模拟这些全局函数

由于该项目在某些地方使用PSR-4,而在其他地方没有名称空间,因此很难绕过这些稀疏耦合的全局函数

我思考解决方案的时间越长,就越意识到需要将这些全局函数重写为更面向对象的方式。我对现有的第三方库做了一些研究,以替换这些全局函数提供的功能

这些全局功能之一是某种翻译服务。我的想法是用Symfony的翻译组件来代替它。我必须克服的主要问题是使此服务在全球范围内可访问。我想出了一个想法,把它作为一个单身汉来实现。这将充当Symfony的翻译组件的包装器,该组件返回转换器实例。我可以在代码中的任何地方轻松访问它,到目前为止,我还没有想出更好的主意

我不确定这是否是一条路,因此我非常需要其他建议和想法。所以我的问题是:

如何在缺少一致名称空间的非Symfony项目中全局访问Symfony翻译组件,而不会产生太多开销

然后像这样使用它:

\App\Translation\Translate::getInstance()->trans('msg');
\App\Translation\Translate::getInstance()->trans('msg');