我正在尝试构建一个简单的抽象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')
感谢。
答案 0 :(得分:3)
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/');
}
}
答案 1 :(得分:0)
一般来说,我避免使用受保护的属性。您可以使用带有受保护的getter的私有属性,以便为该子类提供对该属性的只读访问权。