Bambino
Новичок
Понадобилось мне залезть внутрь фреймворка Yii (заинтересовала реализация кэширования). Рассмотрел код и один момент мне не ясен, видимо не хватает знаний. Очень прошу старших товарищей помочь... У меня правда есть одна догадка... Тогда может скажете верна она или нет.
Итак, рассмотрим код (примерный):
Теперь вопрос: зачем в классе CCache создается метод setValue, который должен быть переопределен в каждом потомке (CApcCache,CFileCache и т.т.)? Получается для каждого метода интерфейса ICache необходимо создать "обертку". Почему в данном случае в классе-потомке (CApcCache) не переопределень тот же самый метод set?:
Собственно это я и хочу прояснить. На данный момент я придумал, что такое "проксирование" было сделано для того, чтобы класс-потомок CAppCache не был привязан к методам класса-родителя CCache, т.е. не зависил напрямую. Но с другой стороны меня смущает тот факт, а зачем же тогда нужно наследование и protected-методы, если я не могу из использовать в потомках?
Итак, рассмотрим код (примерный):
PHP:
interface ICache
{
public function set($id,$value,$expires);
}
class CCache implements ICache
{
public function set($id,$value,$expires)
{
return $this->setValue($this->generateUniqueKey($id),serialize($data),$expire);
}
protected function generateUniqueKey($key)
{
return md5($key);
}
protected function setValue($key,$value,$expire)
{
throw new Exception('Реализуйте этот метод в потомке');
}
}
class CApcCache extends CCache
{
protected function setValue($key,$value,$expire)
{
return apc_store($key,$value,$expire);
}
}
PHP:
class CApcCache extends CCache
{
protected function set($key,$value,$expire)
{
return apc_store($this->generateUniqueKey($id),$value,$expire);
}
}