2013-06-05 59 views
-1

這是我的班,這個班的實例知道他們應該什麼時候保存這個值。你對這個想法有什麼看法,以及這個實現有什麼優點和缺點?我應該將數據保存在類的析構函數中嗎?

class Model_User_Doc extends ArrayObject { 

    protected $_id; 
    protected $_value; 
    protected $_db; 
    protected $_changed = FALSE; 

    public function __construct($id = NULL) { 
     if ($id !== NULL) { 
      $this->_id = $id; 
      $this->_db = DB::instance(); 
      $this->_value = $this->_db->get($id); 
     } 
    } 

    public function __set($key, $value) { 
     $this->_changed = TRUE; 
     $this->_value[$key] = $value; 
    } 

    public function __get($key) { 
     if (isset($this->_value[$key])) { 
      return $this->_value[$key]; 
     } 
     return NULL; 
    } 

    public function __unset($key) { 
     $result = FALSE;   
     if (isset($this->_value[$key])) { 
      $this->_changed = TRUE; 
      unset($this->_value[$key]); 
      $result = TRUE; 
     } 
     return $result; 
    } 

    public function offsetGet($name) { 
     return $this->_value[$name]; 
    } 

    public function offsetSet($name, $value) { 
     $this->_changed = TRUE; 
     $this->_value[$name] = $value; 
    } 

    public function offsetExists($name) { 
     return isset($this->_value[$name]); 
    } 

    public function offsetUnset($name) { 
     $this->_changed = TRUE; 
     unset($this->_value[$name]); 
    } 

    public function cas() { 
     if ($this->_changed === TRUE) { 
      $this->save(); 
     } 
    } 

    public function save() { 
     $this->_db->set($this->_id, $this->_value); 
     $this->_changed = FALSE; 
    } 

    public function __destruct() { 
     $this->cas(); 
    } 

} 

?> 
+2

這個問題可能是更適合_CODE Review_。 – halfer

回答

0

這應該有效。

沒有與此雖然一些挑戰。

如果一個屬性是一個數組或對象變得可以屬性內改變鍵/屬性而沒有觸發__set和從而觸發髒/改變標誌。

你真的沒有任何發言權,在其析構函數調用,所以保存需要從其他的值保存操作時(例如外鍵管理),而一些猴子的業務不能做的操作順序。

有一些情況下,析構函數將不會被調用。更多here

+0

非常感謝,有用的鏈接。 – user2456096

相關問題