0

PHP の OO の概念は初めてです。基本クラスである MY_ controller というクラスがあります。すべてのクラスはこのクラスを拡張します。MVC アーキテクチャを使用しています。現在、システムでキャッシュを使用しています。したがって、基本クラスのコンストラクターにキャッシュ変数をロードします。関数のように通常のphp変数を使用$cacheVariableして、キャッシュから値を保存します。クラスパラメータとして保存して like を使用すると、何か役立つかどうか疑問に思っていました$this->cacheVariableか? 各関数で、値$this->cache->get('cacheVariable');を取得すると役立つキャッシュ値を取得します$this->cacheVariable

4

4 に答える 4

0

(メインコントローラーから派生した)コントローラーのインスタンスを1つだけインスタンス化する場合、それは考えられる解決策です。

于 2012-10-11T17:42:35.480 に答える
0

コンストラクター以外の場所で $cacheVariable を使用できるようにしたい場合は、 $this を使用する必要があります

public function __construct() {
    //...
    $this->cacheVariable = $this->cache->get('cacheVariable');
    //...
}

また、子クラスにこの変数を基本クラスから継承させたい場合は、それを public または protected として設定する必要があることを覚えておいてください。プライベートの場合、子供はそれを継承しません。

于 2012-10-11T17:37:24.007 に答える
0

「クラス変数」と言うときは、プロパティ(インスタンスのプロパティ=)を参照していると思います。違いに注意してください:

MyClassA などのクラスがある場合、スクリプトで new 演算子を使用してそのクラスをインスタンス化します (PHP のバージョンによっては、PHP-5.3.0 以降に変更された別のコンストラクター構文を使用できます)。

<?php
class MY_controller{
  public $cacheVariable;

  // constructor
  function MY_controller($aValue){
     // constructor code which loads cacheVariable, for example with parameter
     $this->cacheVariable = $aValue;
  }

  public function someFunction(){
    //... some code, then access the property
    $cv = $this->cacheVariable;
  }
}

$aController = new MY_controller(42);
?>

MY_controller から継承すると、そのクラスのすべてのインスタンス$this->cacheVariableは、 を介して cacheVariable にアクセスできます。

明確にしたかった重要なことは、これがクラス プロパティではなく、インスタンスプロパティであることです。PHP でのOOP の詳細については、PHP の OOP マニュアルのプロパティ セクション継承セクションを参照してください。

于 2012-10-11T17:41:30.600 に答える
0

私の意見では、より良いアイデアは、クラス内の任意の場所でキャッシュ サービスから直接変数を取得し、それをクラス プロパティとして保持しないことです。理由は簡単です。キャッシュからのキーの値が、クラス以外の場所で変更される (または期限切れになる) としましょう。この値をクラス プロパティとして持っている場合、この値にアクセスするたびに監視する必要がありますが、キャッシュから取得する場合は気にしません (キャッシュは、キーの値が変更されていないか、期限切れになっていないかどうかを気にするためです)。 )。

于 2012-10-11T17:44:52.467 に答える