2012-01-24 5 views
2

Symfony2のサービスコンテナから取得されたオブジェクトが、参照またはコピーとして返されるかどうか疑問です。私は私のような何かを行うかどうかを知りたいのでSymfony2サービスコンテナ - get()は参照またはコピーによってオブジェクトを返しますか?

私が尋ねる理由は次のとおりです。コントローラに

public function helloAction() 
{ 
    $mailer = $this->get('acme.mailer'); 
    $mailer->shutdown(); 
} 

を、およびシャットダウン()メソッドは、オブジェクトの内部で何かをする、意志acme.mailerサービスコンテナ内で「シャットダウン」していますか?

つまり、サービスをコンテナから取得した後に永続的に変更することはできますか?これはいい練習ですか?

おかげで

答えて

5

サービスは、ちょうどすべてのPHPオブジェクト(デフォルト)のように参照することによって返されます。

ただし、あなたは常に特定のサービスの同じインスタンスを取得するわけではありません。

各サービスはスコープ内で定義されています。 - あなたは、同じインスタンスに

  • プロトタイプを取得しているサービスを要求するたびに - あなたは、新しいインスタンス
  • に取得しているサービスを要求するたびに

    • コンテナ:依存性の注入コンテナは、一般的な2つのスコープを提供します

      コンテナのスコープがデフォルトです。

      注::symfonyは、追加のスコープを導入しています。質問の後半部分に答えるためにHow to work with Scopes

      は、公式ドキュメントからスコープ詳細については、こちらをご覧ください。サービスがコンテナスコープ内に定義されている場合、コントローラ内でサービスを破棄することをお勧めしません。アプリケーションの他の部分でもそれが必要な場合があります。むしろデストラクタでシャットダウンを実行したいと思います。

    関連する問題