【发布时间】:2012-11-03 07:47:36
【问题描述】:
我有一个应用程序,它定义了对常见对象类型的某些操作。
例如,您可以拥有论坛帖子和图片。对于每个论坛帖子和图片,您可以执行以下操作:推荐、评论、评分。
我目前已经定义了一个静态类
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';
}
为论坛帖子提供相关功能。这 2 个参数足以让 CoreObjectUtil 中的通用代码知道对这些函数适用的每种对象类型执行什么操作。
要使用这些函数,我在我的实例类中调用 selectPostProcess() 类,如下所示:
public function selectPostProcess ($data)
{
$data = ForumPostUtil::mergeRatings ($data);
$data = ForumPostUtil::mergeComments ($data);
...
}
这很好用,并将主要代码集中在 CoreObjectUtil 类中,其子类提供数据设置,让 CoreObjectUtil 中的代码知道该做什么。
另一种方法是将代码从 CoreObjectUtil 移动到一个基实例类中,然后在我的实例类中继承该基实例类。因此,我不会从 CoreObjectUtil 调用静态方法,而是调用 $this->getComments() 之类的方法。
从功能类型的角度来看,这两种方法都可以正常工作。然而,我想知道面向对象的设计指南和经验丰富的面向对象开发人员如何看待这两种方法。哪种方式更可取,为什么?
我将不胜感激有关此事的任何想法/见解。我可以毫无问题地编写任何一种方式,但我很难决定采用哪条路线。
【问题讨论】:
-
一般的说法是:使用对象,而不是静态类函数。对象更加灵活。
-
当你制作全静态类时,它甚至不是 OOP。 “类”实际上就像变量和函数的命名空间。基本上,这只是另一种形式的过程式编程。
标签: php oop inheritance static