2016-06-10 54 views
2

我有一個關於單身人士設計模式的問題。 當我們爲我們的類應用單例時,我們需要將類的構造函數設置爲私有的,以便我們不能正常地實例化類,但是我們也在類上下文中實例化它(如果我們需要的對象不存在)。問題是爲什麼私人構造函數阻止我們在類上下文中實例化類?單身人士設計模式在PHP

+5

當方法或屬性的可見性設置爲_private_時,誰可以訪問它?它不需要_私人_一定,_protected_也可以,這取決於設計和目的。 – dbf

回答

3

可見性修飾符用於指定誰可以信任與此方法或屬性交互。這個想法是,每種方法和財產都有特定的目的,應該以特定的方式使用;例如某些方法只能在特定時間調用,某些屬性只能設置爲某些值。如果每個方法和屬性都是public,那麼任何代碼都可以隨時與它進行交互,即使它不能「正確」執行。爲了最大限度地減少由此導致的問題,可視性可以僅限於一類(protected)或僅限於一個具體類(private)。

這種交互是在static還是對象上下文中,或者它是「當前」對象還是它的另一個實例都沒有區別。預計該類將被「限定」與該方法正確交互,因此可以這樣做。這可能會根據這一理念令你感到驚訝,但即使這樣工作得很好:

class Foo { 
    private $bar; 

    public static baz() { 
     $obj = new Foo; 
     $obj->bar = 42; 
    } 
} 

類是沒有操縱$this,它的操縱自身的實例的private財產,這是允許的。所以調用它自己的構造函數。

1

如果某個類的方法設置爲private,則不能在子類外部訪問它,也不能在子類中訪問它,但只能在該特定類中使用私有方法。 __construct()沒有什麼不同,當你將__construct()設置爲private時,你不能在類之外訪問__construct()。當我們實例化一個類的對象時,PHP會自動調用它的構造函數..如果設置爲private,則會阻止實例化一個新對象。但是..如果我們實例化一個類的對象 - 在那個類中,PHP試圖調用__construct()&沒有什麼阻止它在那裏..

我希望我能夠清楚您。 :)

+0

謝謝你的回答:) –