/** * ファクトリメソッドパターン * ------------- * @author zhangqian * @version v1.0*/ //キャッシュインターフェイス インターフェイスキャッシュ { public function init($conf); public function setVal($key , $ val); public function getVal($key); public function delVal($key); public function autoIncreament($key); } //mem class mymemCache はキャッシュを実装します { //mymem connection public function init($conf) { echo 'mymem を初期化'; } public function setVal($key , $val) { echo 'mem set value'; } public function getVal($key) { echo 'mem 値を取得'; } public function delVal($key) { echo 'mem delete value'; } public function autoIncreament($key) { echo 'mem auto-increment'; } } //redis class redisCache はキャッシュを実装します { //redis 接続 public function init($arr) { echo 'redis の初期化'; } public function setVal($key, $val) { echo 'redis 設定値'; } public function getVal($key) { echo 'redis get value'; } public function delVal($key) { echo 'redis delete value'; } public function autoIncreament($key) { echo 'redis auto-increment'; } } class queueFactory { private static $obj; private static $type; private static $conf; private static $allowtype = array ('mymem','redis'); プライベート静的関数 getConfig() { //include_once('config.php'); 構成ファイルをロードして、キャッシュ タイプとキャッシュ構成パラメーターを取得します global $_SC ; self ::$type = $_SC['cachetype'];//short 値の判定 self::$conf = $_SC['cacheconf'];//short 値の判定 } //外部呼び出しキャッシュ オブジェクトを作成するには public static function CreateOperation(){ self::getConfig(); try { $error = '不明なキャッシュ タイプ'; if(in_array(self::$type , self::$allowtype )) { $type = self::$type.'Cache'; self::$obj = new $type; self::$obj->init(self::$conf);//接続 } else throw new Exception($error); } catch (Exception $e) { echo '例外をキャッチしました: ', $e->getMessage(), "n"; exit; } return self: :$obj; } } $_SC = array(); $_SC['cachetype'] = 'redis';//mymem $_SC['cacheconf '] = array(); $cache =cacheFactory::CreateOperation(); $cache->setVal('a',1); echo ''; $a = $ queue-> ;getVal('a'); echo ''; $cache->delVal('a'); ?> コードをコピー