現在、私はデータエントリ(レコード)を取得するためにパターンを使用しています。 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()を使用することもできます。
しかし、私は考えを助けるのに必要なのは、この種の実装をして、それがクリーンな方法で複数のレコードに対して機能するようにする良い方法です。
外部からの希望の動作を記述すると、クラスのユーザーが達成できるようにするにはどうすればよいでしょうか。その後、あなたは実装について心配することができます... –