PHP の OO の概念は初めてです。基本クラスである MY_ controller というクラスがあります。すべてのクラスはこのクラスを拡張します。MVC アーキテクチャを使用しています。現在、システムでキャッシュを使用しています。したがって、基本クラスのコンストラクターにキャッシュ変数をロードします。関数のように通常のphp変数を使用$cacheVariable
して、キャッシュから値を保存します。クラスパラメータとして保存して like を使用すると、何か役立つかどうか疑問に思っていました$this->cacheVariable
か? 各関数で、値$this->cache->get('cacheVariable');
を取得すると役立つキャッシュ値を取得します$this->cacheVariable
4 に答える
(メインコントローラーから派生した)コントローラーのインスタンスを1つだけインスタンス化する場合、それは考えられる解決策です。
コンストラクター以外の場所で $cacheVariable を使用できるようにしたい場合は、 $this を使用する必要があります
public function __construct() {
//...
$this->cacheVariable = $this->cache->get('cacheVariable');
//...
}
また、子クラスにこの変数を基本クラスから継承させたい場合は、それを public または protected として設定する必要があることを覚えておいてください。プライベートの場合、子供はそれを継承しません。
「クラス変数」と言うときは、プロパティ(インスタンスのプロパティ=)を参照していると思います。違いに注意してください:
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 マニュアルのプロパティ セクションと継承セクションを参照してください。
私の意見では、より良いアイデアは、クラス内の任意の場所でキャッシュ サービスから直接変数を取得し、それをクラス プロパティとして保持しないことです。理由は簡単です。キャッシュからのキーの値が、クラス以外の場所で変更される (または期限切れになる) としましょう。この値をクラス プロパティとして持っている場合、この値にアクセスするたびに監視する必要がありますが、キャッシュから取得する場合は気にしません (キャッシュは、キーの値が変更されていないか、期限切れになっていないかどうかを気にするためです)。 )。