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());

原文地址:https://www.cnblogs.com/polax/p/15729689.html