PHP OO: доступ к абстрактным свойствам в подклассе? - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь создать простой абстрактный класс Cache, который может применять методы в подклассах, и я пытаюсь установить настройки по умолчанию для наследования подклассов.Вот мой основной недостаток:

    define('APP_ROOT', getcwd());        
    abstract class BaseCache {

            protected $baseCacheDir = APP_ROOT . '/cache';

            abstract function exists($resource);
            abstract function store($resource);
            abstract function delete($resource);
            abstract function check($resource);
        }

    class TemplateCache extends BaseCache {

            protected $CacheDir = $this->baseCacheDir . '/tpl/';
            public function exists($resource) {}...
         }

class LinkCache extends BaseCache {

            protected $CacheDir = $this->baseCacheDir . '/link/';
        }

Это правильный / лучший способ сделать это?Это как вы получаете доступ к свойствам в абстрактных классах в подклассе?Свойство $ baseCacheDir не следует изменять, и я хочу жестко закодировать его по умолчанию, а затем создать подклассы из базового каталога.(например, «cache / link», «cache / tpl», «cache / apc», «cache / memcache»)

Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 марта 2012
abstract class BaseCache {

    private $baseCacheDir = APP_ROOT . '/cache';

    protected final  function getBaseCacheDir() 
    {
        return $this->baseCacheDir;
    }

    //And Anoter Thing
    protected final  function getBaseCacheDirConcat($tplDir)
    { 
        return $this->getBaseCacheDir().$tplDir
    } 

    abstract function exists($resource);
    abstract function store($resource);
    abstract function delete($resource);
    abstract function check($resource);
}

class LinkCache extends BaseCache {

    protected $CacheDir;

    public function __construct() 
    {
        $this->CacheDir = $this->getBaseCacheDirConcat('/link/');
    }

}
0 голосов
/ 08 марта 2012

Вообще я избегаю защищенных свойств.Вы можете использовать частное свойство с защищенным геттером, чтобы предоставить доступ только для чтения к свойству подклассу.

...