容器使用
控制反转(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 :绑定
可以将一个类绑定到对应的接口,或者将子类绑定到父类上实例:
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方法**