私はフォーラムを作成しています。ユーザーが最後に訪問した後に更新されたスレッドを追跡したいと思います。だから私は基本的に[$boardid][$threadid] = 1
として構造化されている$ _SESSIONで保持する配列を持っています。 threadidとboardidが設定されている場合、スレッドは読み取られておらず、ボードには未読スレッドが含まれています。ユーザーがスレッドを見るとき、私はちょうどunset()
適切なボードとスレッドIDです。しかし、私はこのような配列で動作するように設定を解除することに問題があります。オーバーロードされたプロパティの間接的変更
はまず、私はその後、私は現在のユーザーを表すCurrentUserにクラスを持って少しよりよい
class Session {
private $_namespace;
public function __construct($namespace = '_default') {
$this->_namespace = $namespace;
}
/**
* Erase all variables in the namespace
*/
public function clear() {
unset($_SESSION[$this->_namespace]);
}
public function __set($name, $value) {
$_SESSION[$this->_namespace][$name] = $value;
}
public function __get($name) {
if(isset($_SESSION[$this->_namespace]) && array_key_exists($name, $_SESSION[$this->_namespace])) {
return $_SESSION[$this->_namespace][$name];
}
return null;
}
public function __isset($name) {
return isset($_SESSION[$this->_namespace][$name]);
}
public function __unset($name) {
unset($_SESSION[$this->_namespace][$name]);
}
};
をセッションデータを処理するためにセッションクラスを持っています。 CurrentUserクラスにはSessionオブジェクトである_dataという名前のメンバがあります。 CurrentUserクラスでは、_dataメンバーを使用するために、__getメソッドと__setメソッドをオーバーライドします。
public function __set($name, $value) {
$this->_data->$name = $value;
}
public function __isset($name) {
return isset($this->_data->$name);
}
public function __get($name) {
if(isset($this->_data->$name)) {
return $this->_data->$name;
}
return null;
}
ここで、未読のスレッドを追跡するために、日付がユーザーのlast_seenの日付を超えるすべてのスレッドを取得します。配列からボードとスレッドを削除する方法もあります。
public function buildUnreadList($since) {
// Build a "new since last visit" list
$forumModel = new Model_Forum();
$newThreads = $forumModel->fetchThreadsSinceDate($since);
foreach($newThreads as $thread) {
$tmp =& $this->unreadThreadsList;
$tmp[$thread['board']][$thread['id']] = 1;
}
}
public function removeThreadFromUnreadList($boardid, $threadid) {
$threads =& $this->unreadThreadsList;
unset($threads[$boardid][$threadid]);
}
public function removeBoardFromUnreadList($boardid) {
$threads =& $this->_data->unreadThreadsList;
unset($threads[$boardid]);
}
これは私が問題に遭遇しているところです。 にエラーが発生しました$threads =& $this->_data->unreadThreadsList;
この問題を解決する方法と、より良いソリューションを設計する方法はありますか?私は、配列の配列を配列する必要はないので、配列を追跡するクラスを作成することを考えましたが、オブジェクトを永続化したり、配列を管理するためにオブジェクトを作成することは確実ではありません。私に。