Aşırı mülkiyet dolaylı modifikasyonu

0 Cevap php

Ben bir forum oluşturma yaşıyorum ve ben kullanıcı son ziyaretinizden bu yana konuları güncellendi hangi takip etmek istiyorum. Yani temelde [$boardid][$threadid] = 1 olarak yapılandırılmış olmasıdır $ _SESSION tutmak bir dizi var. Threadid ve BoardID ayarlanır, daha sonra iplik okumak olmamıştır ve yönetim kurulu okunmamış konuları içerir. Bir kullanıcı bir iplik gördüğünde, ben sadece unset() uygun yönetim ve iplik kimliği. Ancak, bu gibi diziler ile çalışmak için unset alma ile sorunlarınız var.

Öncelikle, ben taşıma oturum verileri biraz daha güzel yapmak için bir oturum dersim var

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]);
}

};

Sonra geçerli kullanıcıyı temsil eden bir CurrentUser sınıf var. CurrentUser sınıf-bir olan Session nesnesi _DATA adında bir üyesi var. CurrentUser sınıfta ben _DATA üye kullanmak için __ almak ve __ set yöntemleri geçersiz kılar.

    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;
}

Şimdi ipler okunmamış olmuştur hangi takip etmek, kimin tarih> = kullanıcının last_seen tarihi bütün konuları getir. Ben de diziden kurulu ve konuları kaldırmak için yöntemler var.

    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]);
}

Ben sorunlarla çalıştırıyorum yerdir. I $threads =& $this->_data->unreadThreadsList; Nasıl bu sorunu gidermek ya da daha iyi bir çözüm tasarlayabilirsiniz ya da üzerinde bir Indirect modification of overloaded property Session::$unreadThreadsList has no effect hata alıyorum? Ben bu yüzden dizilerin Dizilerle bir dizi var gerekmez dizi izler bir sınıf oluşturma hakkında düşündüm, ama ben nesneleri kalıcı ve adil bir dizi gerçekten kirli hissediyor yönetmek için bir nesne oluşturmaya emin değilim bana.

0 Cevap