2

行ごとに異なるクラスを返すZend_Db_Tableを作成するにはどうすればよいですか。

例UserTableにはid、name、typeがありますTypeにはクラス名(admin、clientなど)が含まれます

クラスadmin、clientは、すべてuserのサブクラスです。

fetchを呼び出す場合、db内の対応する値に応じて、管理者オブジェクトまたはクライアントオブジェクトを取得する必要があります。

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_rowClasscurrent

現在の特定のクラスをインスタンス化し、型パラメーターに基づいて返すことができます。

代わりにコンポジションを使用することについて考えたことはありますか? それが管理者タイプか何かである場合、新しいクラスにデータを渡すだけですか?

于 2010-06-03T14:14:46.390 に答える