2012-10-18 66 views
2

我對如何爲對象實現狀態有困難。 比方說,我們有這樣的:PHP:用對象實現狀態

class User { 

    private $_active;// 1 or 0 
    private $_deleted;// 1 or 0 
    ... 

} 

這些屬性 - 在我看來 - 意味着用戶對象上的狀態。 我想要做的是定義一些像afterActivate()或afterDelete()這樣的事件,這樣我就可以鏈接我的例程。即激活後更新一些計數器,刪除後也更新一些計數器...

所以我現在考慮兩種方法 - 第一個是創建類Activable和Deletable(不介意命名),然後使用戶通過繼承層次繼承這些類。

class Activable { 

    protected afterActivate(){}; 

} 

class Deletable { 

    protected afterDelete(){}; 
} 

class Activable extends Deletable {} 
class User extends Activable{} 

有兩個問題,我用這種方法看到的 - 第一個是類活化現在已經隱含可刪除狀態,這是錯誤的,第二個問題是 - 如果我有更多的國家 - 5-6規定的繼承層次可能會變得相當複雜。 (因爲用戶將擴展模型類,這將擴展別的東西等等......)

第二種方法是在PHP中使用特徵並使用它們來實現這一點。 所以我會像

class User{ 
    use Activable, Deletable; 

} 

哪種方法會更好 - 或許有些第三屆辦法? 我在這裏朝着正確的方向走嗎?

Thanx。

回答

0

通常你會使用Marker Interface s這種事情。
我想這是某種我們正在談論的ORM?比我還假設有某種對象處理你的實體的持久性。讓那個對象檢查那個$entity instanceof Deletable並對此採取行動。

+0

由於您的答案是唯一的一個,標記界面是一個可行的解決方案,我會接受它作爲正確的答案。 – Mathew