/** * 获取处理Request Cache的类实例 * * @param array $cache_config * @return FileCache|MemcacheBase|RedisCache|RequestMemcache|RequestRedisCache|RequestCacheInterface|object * @throws \Cross\Exception\CoreException */ static function factory($cache_config) { $cache = $cache_config['type']; if (!self::$cache_object) { if (is_int($cache)) { switch ($cache) { case 1: self::$cache_object = new FileCache($cache_config); break; case 2: self::$cache_object = new RequestMemcache($cache_config); break; case 3: self::$cache_object = new RequestRedisCache($cache_config); break; default: throw new CoreException('不支持的缓存'); } } elseif (is_object($cache)) { if ($cache instanceof RequestCacheInterface) { self::$cache_object = $cache; self::$cache_object->setConfig($cache_config); } else { throw new CoreException('Request Cache必须实现RequestCacheInterface'); } } elseif (is_string($cache)) { $object = new ReflectionClass($cache); if ($object->implementsInterface('Cross\\I\\RequestCacheInterface')) { self::$cache_object = $object->newInstance(); self::$cache_object->setConfig($cache_config); } else { throw new CoreException('Request Cache必须实现RequestCacheInterface'); } } else { throw new CoreException('不支持的缓存类型'); } } return self::$cache_object; }
/** * RequestCache * * @param int|object|string $cache_type * @param array $cache_config * @return FileCacheDriver|Memcache|RedisCache|RequestCacheInterface|object * @throws CoreException */ static function factory($cache_type, array $cache_config) { if (!self::$instance) { if (is_int($cache_type)) { switch ($cache_type) { case self::FILE_TYPE: self::$instance = new FileCacheDriver($cache_config); break; case self::MEMCACHE_TYPE: self::$instance = new Memcache($cache_config); break; case self::REDIS_TYPE: self::$instance = new RedisCache($cache_config); break; default: throw new CoreException('不支持的缓存类型'); } } elseif (is_object($cache_type)) { if ($cache_type instanceof RequestCacheInterface) { self::$instance = $cache_type; self::$instance->setConfig($cache_config); } else { throw new CoreException('Request Cache必须实现RequestCacheInterface'); } } elseif (is_string($cache_type)) { $object = new ReflectionClass($cache_type); if ($object->implementsInterface('Cross\\I\\RequestCacheInterface')) { self::$instance = $object->newInstance(); self::$instance->setConfig($cache_config); } else { throw new CoreException('Request Cache必须实现RequestCacheInterface'); } } else { throw new CoreException('不能识别的缓存类型'); } } return self::$instance; }