我有一个应用程序定义了常见对象类型的某些操作。PHP OO设计:扩展静态类或实例类?
例如,您可以拥有论坛帖子和图片。对于每个论坛帖子和图片,您可以执行以下操作:推荐,评论,评分。
我已经当前定义的静态类
class CoreObjectUtil
{
protected static $_objObjKey = null;
protected static $_objTypeKey = null;
public static function getComments (...) {...}
public static function getCommentsArray (...) {...}
public static function getRatings (...) {...}
public static function getRatingsArray (...) {...}
}
,然后将其子类这样
class ForumPostUtil extends CoreObjectUtil
{
protected static $_objObjKey = 'forumpost';
protected static $_objTypeKey = 'FP';
}
提供了论坛帖子的相关功能。这两个参数足以让CoreObjectUtil中的泛型代码知道为这些函数适用的每种对象类型要做什么。
要使用这些功能,我打电话在我的实例类selectPostProcess()类这样的:
public function selectPostProcess ($data)
{
$data = ForumPostUtil::mergeRatings ($data);
$data = ForumPostUtil::mergeComments ($data);
...
}
这种运作良好,并保持在CoreObjectUtil类集中与它的子类提供数据的主要代码设置让CoreObjectUtil中的代码知道该怎么做。
一种替代方法将是从CoreObjectUtil代码移动到一个基本实例类,然后将其在我的实例类继承。因此,而不是从CoreObjectUtil调用静态方法,我会做$ this-> getComments()方法调用。
从功能类型的角度来看,任何一种方法都可以正常工作。然而,我很想知道面向对象的设计指南和经验丰富的ObjectOriented开发人员对这两种方法的看法。哪种方式更好,为什么?
我希望对此事有任何想法/见解。我可以在没有问题的情况下以任何方式编写代码,但我很难决定采取哪条路线。
一般的说法是:使用对象,而不是静态类的功能。对象更加灵活。 – hakre
当你进行全静态类时,它甚至不是OOP。 “类”实际上就像变量和函数的名字空间一样。基本上,这只是程序编程的另一种形式。 –