| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | <?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------namespace think;use think\cache\Driver;/** * Class Cache * * @package think * * @mixin Driver * @mixin \think\cache\driver\File */class Cache{    /**     * 缓存实例     * @var array     */    protected $instance = [];    /**     * 缓存配置     * @var array     */    protected $config = [];    /**     * 操作句柄     * @var object     */    protected $handler;    public function __construct(array $config = [])    {        $this->config = $config;        $this->init($config);    }    /**     * 连接缓存     * @access public     * @param  array         $options  配置数组     * @param  bool|string   $name 缓存连接标识 true 强制重新连接     * @return Driver     */    public function connect(array $options = [], $name = false)    {        if (false === $name) {            $name = md5(serialize($options));        }        if (true === $name || !isset($this->instance[$name])) {            $type = !empty($options['type']) ? $options['type'] : 'File';            if (true === $name) {                $name = md5(serialize($options));            }            $this->instance[$name] = Loader::factory($type, '\\think\\cache\\driver\\', $options);        }        return $this->instance[$name];    }    /**     * 自动初始化缓存     * @access public     * @param  array         $options  配置数组     * @param  bool          $force    强制更新     * @return Driver     */    public function init(array $options = [], $force = false)    {        if (is_null($this->handler) || $force) {            if ('complex' == $options['type']) {                $default = $options['default'];                $options = isset($options[$default['type']]) ? $options[$default['type']] : $default;            }            $this->handler = $this->connect($options);        }        return $this->handler;    }    public static function __make(Config $config)    {        return new static($config->pull('cache'));    }    public function getConfig()    {        return $this->config;    }    public function setConfig(array $config)    {        $this->config = array_merge($this->config, $config);    }    /**     * 切换缓存类型 需要配置 cache.type 为 complex     * @access public     * @param  string $name 缓存标识     * @return Driver     */    public function store($name = '')    {        if ('' !== $name && 'complex' == $this->config['type']) {            return $this->connect($this->config[$name], strtolower($name));        }        return $this->init();    }    public function __call($method, $args)    {        return call_user_func_array([$this->init(), $method], $args);    }}
 |