Symfony2服务容器-get()是否通过引用或复制返回对象?

Symfony2服务容器-get()是否通过引用或复制返回对象?,symfony,Symfony,只是一个简单的问题,想知道从Symfony2中的服务容器检索到的对象是通过引用还是作为副本返回的 我问的原因是因为我想知道我是否做了以下事情: public function helloAction() { $mailer = $this->get('acme.mailer'); $mailer->shutdown(); } 在控制器中,如果shutdown()方法在对象内部执行某些操作,那么acme.mailer服务是否会在容器中“shutdown” 换句话说,我

只是一个简单的问题,想知道从Symfony2中的服务容器检索到的对象是通过引用还是作为副本返回的

我问的原因是因为我想知道我是否做了以下事情:

public function helloAction()
{
    $mailer = $this->get('acme.mailer');
    $mailer->shutdown();
}
在控制器中,如果shutdown()方法在对象内部执行某些操作,那么acme.mailer服务是否会在容器中“shutdown”

换句话说,我可以在从容器中获取服务后永久地更改它吗?这是好的做法吗


谢谢

服务通过引用返回,就像所有PHP对象一样(默认情况下)

但这并不意味着您将始终获得给定服务的相同实例

每个服务都在一个作用域中定义。DependencyInjection容器提供两个通用作用域:

  • 容器-每次请求服务时,都会得到相同的实例
  • prototype—每次请求服务时,您都会得到一个新实例
容器范围是默认范围

注意:Symfony引入了其他作用域

从官方文档中了解有关作用域的更多信息:

回答问题的第二部分。如果服务是在容器范围内定义的,我认为在控制器中销毁它不是一个好主意。应用程序的其他部分可能仍然需要它。我宁愿在析构函数中执行关机