2009-08-28 71 views
1

因此,目前我正在使用一种模式来抓取数据条目(记录)。如果我只需要处理一条记录,它对我很好。但是,如果涉及多条记录,则会变得更加复杂。PHP数据访问多条记录

这里是我的基本模式,采用了触点表:

class Contacts_Entry { 

    private $_entry = Array('contact_id' => false, 
          'name'  => false, 
          'email'  => false, 
          'phone'  => false, 
          'type'  => false); 

    private $_entryKey = Array('contact_id' => 'i', 
           'name'  => 's', 
           'email'  => 's', 
           'phone'  => 's', 
           'type'  => 'i'); 


    public function __call($_method, $_arguments) 
    { 
     /* API: Get */ 
     if (substr($_method, 0, 3) == 'get') { 
      return $this->_getElement(camelCaseToUnderscore(substr($_method, 3))); 
     } 
     /* API: Set */ 
     if (substr($_method, 0, 3) == 'set' && count($_arguments) == 1) { 
      return $this->_setElement(camelCaseToUnderscore(substr($_method, 3)), $_arguments[0]); 
     } 
     unset($_method,$_arguments); 
     return false; 
    } 

    private function _getElement($_element) 
    { 
     if (!array_key_exists($_element, $this->_entry)) { return false; } 

     if ($this->_entryKey[$_element] == 's') { 
      if (!strlen($this->_entry[$_element])) { return false; } 
     } elseif ($this->_entryKey[$_element] == 'i') { 
      if (!strlen($this->_entry[$_element]) || !is_numeric($this->_entry[$_element])) { return false; } 
     } elseif ($this->_entryKey[$_element] == 'a') { 
      if (!count($this->_entry[$_element])) { return false; } 
     } else { 
      return false; 
     } 

     return $this->_entry[$_element]; 
    } 

    private function _setElement($_element, $_data) 
    { 
     if (!array_key_exists($_element, $this->_entry)) { return false; } 

     if ($this->_entryKey[$_element] == 's') { 
      if (!strlen($_data)) { return false; } 
     } elseif ($this->_entryKey[$_element] == 'i') { 
      if (!strlen($_data) || !is_numeric($_data)) { return false; } 
     } elseif ($this->_entryKey[$_element] == 'a') { 
      if (!count($_data)) { return false; } 
     } else { 
      return false; 
     } 

     if ($this->_entry[$_element] = $_data) { return true; } 
     return false; 
    } 

    public function load($_entryId) 
    { 
     // Code to load an entry into $this->_entry; 
    } 

    public function save() 
    { 
     // Code to save an entry from $this->_entry; 
    } 
} 

正如你所看到的,这非常适用于单记录。我甚至可以将这个对象传递给Smarty,并在模板中使用getMethod()。

但是,我需要帮助思考,是一种很好的方式来采取这种实现,并使其适用于多个记录,以干净的方式。

+0

如果您从外部描述了期望的行为 - 您希望您的班级的用户能够实现什么,这可能会更清楚?那么你可以担心执行... – 2009-08-28 07:49:57

回答

0

你为什么不简单地用它作为对象列表(数组)。所以你可以遍历数组。每个数组节点都有自己的对象。就这样。

相关问题