4
我對每個域對象的當前基本結構,我需要創建:重構要刪除靜態方法代碼味道
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世界。
我只是想知道如果任何人有如何重構這個代碼,這樣我就不必重新聲明中,我創建的每個域對象相同的三個功能建議?
再次感謝比爾。我知道你在前面的回答中提到了後期的靜態綁定,但是直到我開始重構代碼,才意識到這種限制的含義。看看你的第一個解決方案,它看起來很直觀。 – 2008-12-24 23:19:44