• 默认方法
    • 默认方法
    • 复杂实例

    默认方法

    默认方法


    默认由 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(门面模式)