我有一個應用程序定義了常見對象類型的某些操作。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。 「類」實際上就像變量和函數的名字空間一樣。基本上,這只是程序編程的另一種形式。 –