ServiceManagerは基本的にコンテナとして機能します。コンテナの内部では、作成したオブジェクトのさまざまな依存関係を満たしてから、他のオブジェクトで使用するためにそのオブジェクトを戻します。
SMがオブジェクトの上に座っているように、オブジェクトの内部には入っていません。オブジェクト内でSMインスタンスを使用している場合(おそらく他のサービスにアクセスする場合)、Inversion of Controlの原則に反するでしょう。続い
は、他の方法Module.php
内部のどこか
class B {
private $data;
public function __constructor($user_data) {
$this->data = $user_data; //$user_data getting injected from sm container
}
}
二つの方法
class A {
private $data;
public function __constructor($sm) {
$this->data = $sm->get('user_data'); // Service manager accessed inside the object
}
}
ある:第2の例示的依存性($user_data
)で
'factories'=>
array(
'objB'=> function($sm) {
//this is the container where sm sites outside the object to satisfy its dependencies
$objB = new B($sm->get('user_data'));
return $objB;
}
)
オブジェクトに注入されます。
正確に取得しますか? – Crisp