2
我正在一個MVC應用程序中使用抽象基類實現模型,所有實際模型必須擴展。在每個模型中都有關於該模型的一些信息,目前作爲一個數組實現,讓我們調用protected static $info
。所以,每個型號都有不同的$info
陣列。現在,基類有很多使用該數組的數據的函數,並且此刻每個函數都以類似下面的示例save()函數開始。將PHP的特點是一個很好的解決方案
abstract class BaseModel {
function save(){
$className = get_called_class();
$modelInfo = $className::$info;
/* lots of other stuff */
}
}
class User extends BaseModel {
protected static $info = array("tableName" => "tblUsers", etc...)
}
在我的理解,這可以通過使BaseModel一個特徵,而不是一個構造函數,因爲當特性定義static
性能得到解決,每個繼承類確實有自己的價值觀。我會將$info
數組從模型的實現複製到特徵,可能在構造函數中,這樣我就可以在BaseModel的所有函數中使用self::info['tableName']
...
這是個好主意嗎?
大,這個工程。我感到有點慚愧,我沒有自己想出這個。謝謝! – 2012-03-28 07:26:03
@Lex:其實你確實想到了它,你的代碼和後期靜態綁定在幕後做的事情完全一樣。 ;) – Jon 2012-03-28 07:29:11