Di类 Gene\Di

注册类 Gene\Di

  • 介绍

    Gene\Di 是gene框架的核心类之一,用Gene\Di来做单例集中管理非常方便,效率极高;同时,用di实现ioc对象注入,控制反转等框架功能。

  • 实例化

    初始化reg。Gene\Di用来存取对象,适合管理单对象,提供的方法都是静态方法。

    参数:

    返回值: Gene\Di实例化对象本身。

    实例:

    
      //实例化注册对象
      $reg = new Gene\Di();
  • set

    设置对象。

    参数:

    参数 类型 是否必填 注释
    keyName String 配置名称。
    value object 实例化化的对象。

    返回值: boolean。

    实例:

    
      $aClass = new demo();
      Gene\Di::set("testClass",$a);
  • get

    获取对象。

    参数:

    参数 类型 是否必填 注释
    keyName String 配置名称。

    返回值: object 对象。

    实例:

    
      $aClass = Gene\Di::get("testClass");
  • del

    删除对象。

    参数:

    参数 类型 是否必填 注释
    keyName String 配置名称。

    返回值: boolean。

    实例:

    
      Gene\Di::del("testClass");
  • has

    判断对象是否已存在。

    参数:

    参数 类型 是否必填 注释
    keyName String 配置名称。

    返回值: boolean。

    实例:

    
      $result = Gene\Di::has("testClass")
  • 综合使用例子

    在框架中,通常封装工厂模式,需要实现单例,用Gene\Di就很方便了,并且可以全项目通用。

    参数:

    参数 类型 是否必填 注释
    keyName String 配置名称。

    返回值: boolean。

    实例:数据库工厂

    
      /**
       * Connect db from config
       *
       * @param array $config db config
       * @param string db config key name
       * @return Db
       */
      public function db($name = NULL)
      {
          NULL === $name && $name = $this->_db;
    
          if (is_array($name)) {
              return Ext\Com\Db::factory($name);
          }
    
          $regName = "_db_{$name}";
          if (!$db = Gene\Di::get($regName)) {
              $config = (array) Gene\Application::config($name);
              $db = Ext\Com\Db::factory($config);
              Gene\Di::set($regName, $db);
          }
    
          return $db;
      }