默认方法

默认方法


默认由 IOC 容器托管的对象都会被添加上两个方法;

方法含义
_initialize初始化方法
_prepared初始化完成方法

_initialize::可以注入多个任意你需要的对象

实例:

  1. class UserService{
  2. /**
  3. * @var Connection
  4. */
  5. private $connection;
  6. public function _initialize(Connection $connection) {
  7. $this->connection = $connection;
  8. }
  9. public function _prepared(){
  10. if($this->connection){
  11. //这里connection 已有值
  12. }
  13. }
  14. }

复杂实例


下面的实例正式项目不一定能遇到,但是这里可以看出 AService,BService的相互依赖关系和如何进行AService,BService的充分解耦这里为了方便没有使用接口

  1. class AService{
  2. /**
  3. * @var BService
  4. */
  5. private $bService;
  6. public function _initialize(BService $bService){
  7. $this->bService=$bService;
  8. }
  9. public function test(){
  10. $this->bService->write();
  11. }
  12. public function xxx(){
  13. echo 'AService的 xxx 方法被调用';
  14. }
  15. }
  16. class BService{
  17. /**
  18. * @var AService
  19. */
  20. private $aService;
  21. public function _initialize(AService $aService){
  22. $htis->aService=$AService;
  23. }
  24. public function write(){
  25. echo 'BService write 方法被调用';
  26. $this->aService->xxx();
  27. }
  28. }
  29. //使用
  30. function test(){
  31. $a=Ioc::get(AService::class);
  32. $a->test();
  33. }

有兴趣的可以试下

思考1: 如果不在 IOC 容器内如何实现写上面的实例(只能有两个对象哦 别出现 A 每次都 new 哦)思考2: 为什么有 _prepared 方法

上一篇:容器使用   下一篇:Facade(门面模式)