容器使用

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

IOC 是一种设计模式

https://www.zhihu.com/question/23277575

RapPhp 的 IOC容器搭配 SWOOLE,突破你对 php 的能力的 想象,Rap 实现了完整的 IOC逻辑

IOC 容器使用

bind :绑定


可以将一个类绑定到对应的接口,或者将子类绑定到父类上实例:

  1. Ioc::bind(DB::class,MysqlDb::class);
  2. Ioc::bind("Orical",OricalDb::class);

get:获取


根据接口|类|名称获取对应的实现类实例

  1. //拿出来的是MysqlDb实例
  2. $db= Ioc::get(DB::class);
  3. //拿出来的是OricalDb实例
  4. $db=Ioc::get("Orical");

bind 回调


可以在对象被实例化时对对象进行初始化,正常是设置对应的配置如:

  1. Ioc::bind(Connection::class,MySqlConnection::class,function(MySqlConnection $connection){
  2. //初始化
  3. $connection->config([
  4. 'dsn'=>"mysql:dbname=xxxx;host=127.0.0.1;charset=utf8",
  5. 'username'=>"root",
  6. 'password'=>"root"
  7. ]);

instance:绑定到对象


  1. $logic= new UserLogic();
  2. Ioc::instance("logic",$logic);
  3. 这样
  4. $db=Ioc::get(“logic”);
  5. $db就是$logic;

特别说明


如果类没有bind 也是可以 get 出来的实例

  1. class UserService{
  2. public save(){
  3. //这里写 save 方法
  4. }
  5. }
  6. 那么
  7. /** var $userService UserService**/
  8. $userService=Ioc::get(UserService::class);
你也可以写个类继承自UserService 然后覆写 save方法**

上一篇:IOC控制反转   下一篇:默认方法