Доступ к данным PHP для нескольких записей - PullRequest
1 голос
/ 28 августа 2009

Так что в настоящее время я использую шаблон для захвата ввода данных (записи). Это прекрасно работает для меня, если мне нужно работать только с одной записью. Однако, если задействовано более одной записи, она усложняется.

Вот мой базовый шаблон, используя таблицу контактов:

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 () внутри шаблона.

Но то, что мне нужно, чтобы придумать, - это хороший способ взять такую ​​реализацию и заставить ее работать для нескольких записей, чистым способом.

Ответы [ 2 ]

1 голос
/ 28 августа 2009

Ты изобретаешь колесо. Прежде чем принять решение о том, что вам нужно внедрить его самостоятельно, сначала посмотрите существующих ORM (или статью ORM в википедии ).

0 голосов
/ 28 августа 2009

Почему бы вам просто не использовать его как список объектов (массив). Таким образом, вы можете перебирать массив. Каждый узел массива имеет свой собственный объект. Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...