使用 Symfony2 服务的最佳方式是什么

What the best way to use services with Symfony2

我有一个巨大的 Symfony 项目。我创建了许多服务和子服务来净化控制器和服务代码。

在我的代码中,我将这些服务实例化为:

$this->get('MyServiceName')->myMethod($foo);

我的一位同事使用 new 关键字来实例化 class:

    $myservice = new Service();

    $refid = $myservice->mymethod($foo);

所以我想知道,这是最佳做法吗?我应该重写该代码吗?这种代码对应用程序的可维护性和性能有什么影响?

总是使用第一种方式(即使用服务容器)因为使用Symfony的依赖注入你不需要担心依赖 and/or 参数;我从未使用过第二种方式(即用new关键字实例化一个服务"by hand"),我很确定这是最糟糕的方式.

顺便说一句,你应该看看 Fabien Potencier 的 official "best practices" guide and these blog posts

如果服务是在 Ioc 容器中定义的,那么一定要从那里使用它,因为它将由容器构建。它承担了开发人员实例化 new 类 的责任。如果显式依赖项发生变化,您只需在容器中更改它们,而不用在整个项目代码中寻找它们。这在大多数情况下也具有性能优势,因为一些 类 只需要实例化一次。不管怎样,和你的同事谈谈,他为什么这样做。