2

如何创建一个 Zend_Db_Table 为每一行返回一个不同的类。?

示例 UserTable 具有 id、name 和 type 类型包含类名(admin、client 等...)

admin、client 类都是 user 的子类

如果我调用 fetch 我需要根据数据库中的相应值获取一个管理员或客户端对象。

4

1 回答 1

0
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 中实例化一个特定的类并根据类型参数返回它。

你有没有想过也许只是使用组合来代替?如果它是管理员类型或其他东西,就说只是将数据传递给一个新类?

于 2010-06-03T14:14:46.390 回答