• 容器使用
    • IOC 容器使用
    • bind :绑定
    • get:获取
    • bind 回调
    • instance:绑定到对象
    • 特别说明

    容器使用

    控制反转(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控制反转   下一篇:默认方法