作成する必要がある各ドメイン オブジェクトの現在の基本構造があります。
class Model_Company extends LP_Model
{
protected static $_gatewayName = 'Model_Table_Company';
protected static $_gateway;
protected static $_class;
public static function init()
{
if(self::$_gateway == null)
{
self::$_gateway = new self::$_gatewayName();
self::$_class = get_class();
}
}
public static function get()
{
self::init();
$param = func_get_arg(0);
if($param instanceof Zend_Db_Table_Row_Abstract)
{
$row = $param;
}
elseif(is_numeric($param))
{
$row = self::$_gateway->find($param)->current();
}
return new self::$_class($row);
}
public static function getCollection()
{
self::init();
$param = func_get_arg(0);
if($param instanceof Zend_Db_Table_Rowset_Abstract)
{
$rowset = $param;
}
elseif(!$param)
{
$rowset = self::$_gateway->fetchAll();
}
$array = array ();
foreach ($rowset as $row)
{
$array[] = new self::$_class($row);
}
return $array;
}
}
私は当初、静的メソッドを親 LP_Model クラスにリファクタリングしようとしましたが、PHP の世界で「遅延静的バインディング」が何を意味するのかを最終的に学ぶためだけでした。
作成するすべてのドメイン オブジェクトで同じ 3 つの関数を再宣言する必要がないように、このコードをリファクタリングする方法について誰か提案があるかどうか疑問に思っています。