视频地址 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']; } }
1.2 anntest\app\test\MyRedis2.php
<?php namespace App\test; class MyRedis2 { public function getValue() { return 'redis'; } }
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());