90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Nextend\Framework\Cache;
 | |
| 
 | |
| 
 | |
| use Nextend\Framework\Cache\Storage\AbstractStorage;
 | |
| 
 | |
| abstract class AbstractCache {
 | |
| 
 | |
|     protected $group = '';
 | |
|     protected $isAccessible = false;
 | |
| 
 | |
|     /** @var AbstractStorage */
 | |
|     public $storage;
 | |
| 
 | |
|     protected $_storageEngine = 'filesystem';
 | |
| 
 | |
|     /**
 | |
|      * @param string $engine
 | |
|      *
 | |
|      * @return AbstractStorage
 | |
|      */
 | |
|     public static function getStorage($engine = "filesystem") {
 | |
|         static $storage = null;
 | |
|         if ($storage === null) {
 | |
|             $storage = array(
 | |
|                 'filesystem' => new  Storage\Filesystem(),
 | |
|                 'database'   => new Storage\Database()
 | |
|             );
 | |
|         }
 | |
| 
 | |
|         return $storage[$engine];
 | |
|     }
 | |
| 
 | |
|     public static function clearAll() {
 | |
|         self::getStorage('filesystem')
 | |
|             ->clearAll();
 | |
|         self::getStorage('filesystem')
 | |
|             ->clearAll('web');
 | |
|     }
 | |
| 
 | |
|     public static function clearGroup($group) {
 | |
|         self::getStorage('filesystem')
 | |
|             ->clear($group);
 | |
|         self::getStorage('filesystem')
 | |
|             ->clear($group, 'web');
 | |
|         self::getStorage('database')
 | |
|             ->clear($group);
 | |
|         self::getStorage('database')
 | |
|             ->clear($group, 'web');
 | |
|     }
 | |
| 
 | |
|     public function __construct($group, $isAccessible = false) {
 | |
|         $this->group        = $group;
 | |
|         $this->isAccessible = $isAccessible;
 | |
|         $this->storage      = self::getStorage($this->_storageEngine);
 | |
|     }
 | |
| 
 | |
|     protected function clearCurrentGroup() {
 | |
|         $this->storage->clear($this->group, $this->getScope());
 | |
|     }
 | |
| 
 | |
|     protected function getScope() {
 | |
|         if ($this->isAccessible) {
 | |
|             return 'web';
 | |
|         }
 | |
| 
 | |
|         return 'notweb';
 | |
|     }
 | |
| 
 | |
|     protected function exists($key) {
 | |
|         return $this->storage->exists($this->group, $key, $this->getScope());
 | |
|     }
 | |
| 
 | |
|     protected function get($key) {
 | |
|         return $this->storage->get($this->group, $key, $this->getScope());
 | |
|     }
 | |
| 
 | |
|     protected function set($key, $value) {
 | |
|         $this->storage->set($this->group, $key, $value, $this->getScope());
 | |
|     }
 | |
| 
 | |
|     protected function getPath($key) {
 | |
|         return $this->storage->getPath($this->group, $key, $this->getScope());
 | |
|     }
 | |
| 
 | |
|     protected function remove($key) {
 | |
|         return $this->storage->remove($this->group, $key, $this->getScope());
 | |
|     }
 | |
| } |