一部のオブジェクトモデルを更新してデータを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をチェックする関数内でコンストラクターのエイリアスを作成する必要がありますか?