• Swoole实战之手撸HttpServer框架 7 使用注解的方式完成依赖注入 phpdi/phpdi


    视频地址 https://www.bilibili.com/video/BV14E411t7T4?p=9

    安装依赖注入组件

    composer require php-di/php-di

    文档 地址

    https://www.kancloud.cn/shanyu/php-di/182580

    1 先构建要注入的类

    1.1  anntest\app\test\MyDB.php

    <?php
    
    namespace App\test;
    
    class MyDB
    {
        private $db;//这里可能是pdo 可能是别的,仅仅为了演示
        public function __construct($connInfo='')
        {
            //
        }
        public function queryForRows($sql)
        {
            return ['user_id'=>1,'user_name'=>'ttt'];
        }
        
    }
    View Code

    1.2 anntest\app\test\MyRedis2.php

    <?php
    
    namespace App\test;
    
    class MyRedis2
    {
       public function getValue()
       {
           return 'redis';
       }
    }
    View Code

    2  把这两个类注入到MyUser2类

    anntest\app\test\MyUser2.php

    <?php
    
    namespace App\test;
    use DI\Annotation\Inject;
    class MyUser2
    {
       private $mydb;
        
        /**
         * 将Redis注入到MyUser2
         * @Inject
         * @var \App\test\MyRedis2
         */
       public $myredis;
        
        /**
         * 通过注解注入对象
         * 可以看到我并没有做任何赋值,
         * 我只是给他加了 @Inject() 注解,我就可以使用它了,是不是很方便。
         * @Inject()
         * @param MyDB $DB
         */
       public function __construct(MyDB $DB)
       {
           $this->mydb=$DB;
       }
       public function getAllUsers()
       {
           return array($this->mydb->queryForRows("select * from users"));
       }
       
    }

    3 使用

    anntest\test.php

    <?php
    require_once __DIR__.'/vendor/autoload.php';
    //composer require php-di/php-di
    //依赖注入(IOC容器)的文档 https://www.kancloud.cn/shanyu/php-di/182580
    $builder = new \DI\ContainerBuilder();
    
    
    $builder->useAnnotations(true);
    $container = $builder->build();
    $myUser = $container->get(\App\test\MyUser2::class);
    var_dump($myUser->getAllUsers());
    var_dump($myUser->myredis->getValue());

  • 相关阅读:
    高级软件工程第一次作业
    《高级软件工程》团队第二次作业
    《高级软件工程》结对第二次作业
    《高级软件工程》团队第一次作业
    《高级软件工程》结对第一次作业
    《高级软件工程》第二次作业
    《高级软件工程》第一次作业
    冲刺NO.1
    冲刺No.4
    冲刺No.3
  • 原文地址:https://www.cnblogs.com/polax/p/15729689.html
Copyright © 2020-2023  润新知