специфический для ряда класс - PullRequest
2 голосов
/ 03 июня 2010

Как мне создать Zend_Db_Table, который возвращает разные классы для каждой строки .?

Пример UserTable имеет идентификатор, имя и тип Тип содержит имена классов (администратор, клиент и т. Д.)

Все классы admin, client являются подклассами пользователя

Если я вызываю fetch, мне нужно получить объект admin или client в зависимости от соответствующего значения в БД.

1 Ответ

0 голосов
/ 03 июня 2010
class Your_Db_Table_Row extends Zend_Db_Table_Row_Abstract
{
}

class Your_Db_Table extends Zend_Db_Table_Abstract
{
    protected $_rowClass = "Your_Db_Table_Row";
}

или

new Your_Db_Table(array("rowClass" => "Your_Db_Table_Row");

Таким образом, всякий раз, когда вы получаете набор строк из своего подкласса таблицы, включенные в него строки будут вашим пользовательским классом.

Редактировать

Чтобы получить пользовательскую строку, основанную на значении, я бы сказал, что вместо этого следует расширить класс Zend_Db_Table_Rowset_Abstract и переопределить этот метод:

getRow(int $position, [bool $seek = false])

Вам также необходимо переопределить метод current и, возможно, некоторые другие реализации SeekableIterator, которые фактически создают класс строк на основе свойства _rowClass. Вы можете установить _rowClass до вызова current в зависимости от типа строки ваших данных.

Вы можете создать конкретный класс в current и вернуть его на основе параметра type.

Хотели ли вы использовать просто композицию? Скажем, просто передать данные в новый класс, если это тип администратора или что-то еще?

...