1

一部のオブジェクトモデルを更新してデータをmemcacheにキャッシュし、キャッシュキーが見つからない場合は、通常の古いSQLクエリにフォールバックしています。もともと、コンストラクターはこのように見えますが、もちろん単純化されています。

function __construct($id){
    $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
    $params = array($id);
    $data = Database::GetRow($sql, $params);

    $this->name = $data['name'];
    $this->place = $data['place'];
}

私はこれを次のようなものに変更しました:

function __construct($id){
    $data = $Memcache->get('obj-'.$id);
    if(empty($data)){
        $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
        $params = array($id);
        $data = Database::GetRow($sql, $params);
        $Memcache->set('obj-'.$id, $data, false, 350);
    }

    $this->name = $data['name'];
    $this->place = $data['place'];
}

これはすべて問題なく機能しますが、オブジェクトの多くには、他のクエリを実行してより多くの属性を設定する他のプライベートメソッドがあります。私ができるようにしたいのは、プロパティが設定された後、オブジェクトをmemcachedから完全に返すことです。$this問題は、コンストラクターがキーワード を割り当てることができないため、これを行う方法がわからないことです。

function __construct($id){
    $data = $Memcache->get('obj-'.$id);
    if(empty($data)){
        $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
        $params = array($id);
        $data = Database::GetRow($sql, $params);
        $this->name = $data['name'];
        $this->place = $data['place'];
        $Memcache->set('obj-'.$id, $data, false, 350);
    }else{
        //this is definitely not right, though semantically it kinda defines what I want to accomplish
        $this = $data
    }
}

とにかくこのロジックをコンストラクターに保持し、memcachedから返されたオブジェクトをコンストラクターが受け取るインスタンスに「なる」ようにする方法はありますか?または、最初にmemcacheをチェックする関数内でコンストラクターのエイリアスを作成する必要がありますか?

4

0 に答える 0