控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。 IOC 是一种设计模式 [https://www.zhihu.com/question/23277575](https://www.zhihu.com/question/23277575) > RapPhp 的 IOC容器搭配 SWOOLE,突破你对 php 的能力的 想象,Rap 实现了完整的 IOC逻辑 ### IOC 容器使用 ### bind :绑定 * * * * * 可以将一个类绑定到对应的接口,或者将子类绑定到父类上 实例: ~~~ Ioc::bind(DB::class,MysqlDb::class); Ioc::bind("Orical",OricalDb::class); ~~~ ### get:获取 * * * * * 根据接口|类|名称获取对应的实现类 实例 ~~~ //拿出来的是MysqlDb实例 $db= Ioc::get(DB::class); //拿出来的是OricalDb实例 $db=Ioc::get("Orical"); ~~~ ### bind 回调 * * * * * 可以在对象被实例化时对对象进行初始化,正常是设置对应的配置 如: ~~~ Ioc::bind(Connection::class,MySqlConnection::class,function(MySqlConnection $connection){ //初始化 $connection->config([ 'dsn'=>"mysql:dbname=xxxx;host=127.0.0.1;charset=utf8", 'username'=>"root", 'password'=>"root" ]); ~~~ ### instance:绑定到对象 * * * * * ~~~ $logic= new UserLogic(); Ioc::instance("logic",$logic); 这样 $db=Ioc::get(“logic”); $db就是$logic; ~~~ ### 特别说明 * * * * * 如果类没有bind 也是可以 get 出来的 实例 ~~~ class UserService{ public save(){ //这里写 save 方法 } } 那么 /** var $userService UserService**/ $userService=Ioc::get(UserService::class); ~~~ > 你也可以写个类继承自UserService 然后覆写 save方法**