во-первых, я бы перестроил ваш класс так, чтобы расширить класс PDO следующим образом:
class Database extends PDO
{
/**
*
* the constructor is set to private so
* so nobody can create a new instance using new
*
*/
private static $Instance;
public $Cache = null;
public function Instance()
{
if(self::$Instance === null)
{
self::$Instance = new Database;
self::$Instance->Cache = new Memcached;
}
return self::$Instance;
}
public function __construct()
{
parent::__construct("Connection;String");
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array(&$this)));
}
}
class DBStatement extends PDOStatement
{
public $db;
protected function __construct(&$db)
{
$this->db =& $db;
}
/*
* PDO Methods!
*/
public function rowCount()
{
return $this->foundRows;
}
public function execute($array = null)
{
if ($array === null)
{
$result = parent::execute();
}else
{
$result = parent :: execute($array);
}
return $result;
}
}
Тогда методы будут переопределены в качестве примера в приведенном выше классе DBStatement, с execute.
Каждый метод, который возвращает набор результатов, которые вы бы отправили md5-запросу для создания уникального хеша для этого запроса, затем вы проверили бы, существует ли он в кеше, если да, то вы вернетесь вместо этого, в противном случае просто запустите новый запрос, извлекающий результаты, а затем, прежде чем их вернуть, сохраните их в кеше