簡體   English   中英

PHP中的Singleton設計模式

[英]Singleton design pattern in PHP

我對單例設計模式有疑問。 當我們為類應用單例時,我們需要將類的構造函數設置為私有,這樣我們就不能正常實例化該類,但是我們還要在類上下文中實例化它(如果我們所需的對象不存在)。 問題是為什么私有構造函數不能阻止我們在類上下文中實例化類?

可見性修飾符用於指定可以信任的人與此方法或屬性進行交互 想法是每種方法和屬性都有特定的用途,應以特定的方式使用; 例如,某些方法只能在某些時間調用,而某些屬性只能設置為某些值。 如果每個方法和屬性都是public ,則任何代碼都可以隨時與其進行交互,即使它沒有“資格”正確地進行交互。 為了最大程度地減少由此引起的問題,可見性可以限制為僅一類類( protected )或僅一個特定類( private )。

此交互是在static還是對象上下文中,甚至是“當前”對象還是它的另一個實例,都沒有區別。 期望該類“合格”以與該方法正確交互,因此可以這樣做。 這可能會讓您感到驚訝,但是根據以下原則,即使這樣也可以正常工作:

class Foo {
    private $bar;

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

該類不是在操作$this ,而是在操作其實例的private屬性,這是允許的。 因此,調用其自己的構造函數。

如果將類方法設置為私有方法,則不能在該類外部訪問它,也不能在子類中訪問它,但是只能在該特定類中使用私有方法訪問私有方法。

__construct()沒什么不同,將__construct()設置為private時,您無法在類外部訪問它。

現在要澄清一點,當我們實例化一個類的對象時,PHP會自動調用其構造函數。如果將其設置為private,則會阻止實例化新對象。 但是..如果我們從with中實例化該類的對象,則該類將嘗試在該類上調用__construct(),並且沒有阻止它的方法。

希望我能為您澄清。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM