PHP OO:在SubClass中访问抽象属性?

时间:2012-03-07 21:15:59

标签: php inheritance properties abstract-class

我正在尝试构建一个简单的抽象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 个答案:

答案 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的私有属性,以便为该子类提供对该属性的只读访问权。