2012-03-07 13 views
1

私は、サブクラスでメソッドを実行できる単純な抽象キャッシュクラスを構築しようとしています。継承するサブクラスのデフォルト設定を設定しようとしています。ここで私の基本的なランニングダウンです:PHP OO:サブクラスで抽象プロパティにアクセスするには?

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')

ありがとうございました。

答えて

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/'); 
    } 

} 
+0

この猫には100種類の方法がありますが、この回答はアクセサーを提供し、子クラスが 'getBaseCacheDir'メソッドをオーバーライドできないようにするため、良い答えです。 –

+0

パーフェクト!ご助力ありがとうございます。私は「最終的な」方法を使用することは考えていませんでした。 OO PHPの新機能 – Brandon

0

一般に、私は保護された特性を避ける。保護されたゲッターを持つプライベート・プロパティーを使用すると、プロパティーに対する読み取り専用アクセスをサブクラスに提供できます。

関連する問題