I ont la structure de base actuelle pour chaque objet de domaine que je dois créer:refactoring pour supprimer le code des méthodes statiques Odeur
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;
}
}
J'ai essayé d'abord de factoriser les méthodes statiques dans la classe LP_Model mère pour apprendre enfin ce que signifie "liaison statique tardive" dans le monde php. Je me demande simplement si quelqu'un a des suggestions sur la façon de refactoriser ce code afin que je n'aie pas à redéclarer les trois mêmes fonctions dans chaque objet de domaine que je crée?
Merci encore une fois Bill. Je sais que vous avez mentionné la liaison statique tardive dans une réponse précédente, mais ce n'est que lorsque j'ai commencé à refactoriser le code que j'ai réalisé quelles étaient les implications de cette limitation. En regardant votre première solution, cela semble assez intuitif. –
Et tandis que l'héritage parmi les propriétés statiques et les méthodes serait la solution la plus élégante, au moins maintenant les méthodes get et getCollection dans chaque classe sont limitées à une seule ligne de code par opposition à beaucoup de code dupliqué. –