2010-01-04 11 views

Odpowiedz

20

Twoja klasa MyObject ma chroniony lub prywatny konstruktor, co oznacza, że ​​nie można utworzyć instancji klasy. __construct() funkcje są wywoływane zawsze, gdy obiekt jest tworzony, więc próba zrobienia czegoś takiego jak $x = new MyObject() spowoduje błąd krytyczny z funkcją konstrukcji prywatnej. (Jeśli nie zadeklarujesz konkretnie funkcji __construct(), zostanie wywołany konstruktor macierzysty).

Prywatne konstruktory są często używane w klasach Singleton, aby uniemożliwić bezpośrednią instancję obiektu. Jeśli nie jest to klasa, którą zbudowałeś, może być dostępna funkcja getInstance() (lub coś podobnego), która zwróci instancję samego siebie.

+0

To zadziałało, wydaje mi się, że widziałem ludzi deklarujących wcześniej prywatnych konstruktorów. Czy jest jakikolwiek powód, aby to zrobić? – Brian

+1

Jedynym powodem, aby to zrobić, jest to, że nie chcesz, aby klasa została utworzona z jakiegoś powodu. Jak wspomniałem w odpowiedzi, wzorzec Singleton jest popularnym powodem, dla którego możesz to zrobić (http://en.wikipedia.org/wiki/Singleton_pattern). – zombat

+1

Prywatne konstruktory są często używane przez implementacje PHP wzorca Singleton i są czasem używane z fabrykami. Na przykład statyczna metoda klasy może wyszukiwać lokalnie buforowane instancje obiektów i zwracać odwołanie zamiast nowego obiektu. Sprawienie, że konstruktor będzie prywatny, zapobiegnie przypadkowym obejściom metody fabrycznej. – Charles

0

Zamiast $x = new MyObject() można użyć

$x = MyObject::getInstance(); 

zakładając, że MyObject jest funkcją Singleton i getInstance() jest dostępna.

2

Dla mnie było to, że Jego nazwa CLASS była taka sama jak nazwa jednego sposobu ów że był prywatny ...

na przykład ...

class myClass { 

    public function __construct() { 

    } 

    private function myClass() { 

    } 
} 
Powiązane problemy