2011-11-25 24 views
0

我有以下類。隨着兩類延伸另一個,如何避免共享屬性

的問題是,$ _instance是越來越之間既AuthFactory和UserFactory共享。

class Factory { 
    protected static $_instance; 
    /*...*/ 
} 

class AuthFactory extends Factory { 
    protected static $_instance; 
    /*...*/ 
} 

class UserFactory extends Factory { 
    protected static $_instance; 
    /*...*/ 
} 

如何避免AuthFactory :: $ _實例中的對象與UserFactory :: $ _實例是同一個對象?

整個原因是,我可以設置工廠的結構,如果每個工廠實際,我想用延長。

+0

只是一個快速的想法,你有沒有嘗試將變量設置爲私有? – lfxgroove

+0

是的,我曾嘗試使用私人的,有同樣的問題。 – eoinoc

回答

1

我的經驗是:

如果您聲明靜態那麼它的價值將它定義的類和所有子類之間共享的屬性。

例外是如果您重新聲明子類中的相同屬性。在這種情況下,每個子類都有自己的價值。這意味着您需要記住重新聲明該財產。但是,由於後期靜態綁定相關的問題,如果使用self :: $變量來訪問該屬性,則該值將從超類中獲取(如果訪問方法是在超類中定義的,如果訪問方法是在子類中定義的,m不知道會發生什麼)。

如果使用靜態:: $變量,而不是,那麼這不應該是一個問題,但我沒有測試過廣泛的所有條件下。

您是使用self :: $ _ instance還是static :: $ _ instance訪問相關屬性?如果是前者,則嘗試改用後者。

我懷疑,但它可能會更好只是爲了讓財產上的非靜態的,這取決於它的意思的用途。

+0

是的,這個工程。看來[PHP 5.3引入了這種使用static關鍵字的新方法](http://www.php.net/manual/en/language.oop5.static.php#101350)。 – eoinoc