Podczas tworzenia nowego obiektu w PHP, pojawia się następujący komunikat o błędzie:
Fatal error: Call to private MyObject::__construct() from invalid context
po prostu utworzyć nowy obiekt i nie spróbować zadzwonić konstruktor jawnie. Czy ktoś wie, co się dzieje?Błąd krytyczny: Zadzwoń do prywatnej MyObject :: __ construct() z nieprawidłowym kontekście
Odpowiedz
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.
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
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
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
Zamiast $x = new MyObject()
można użyć
$x = MyObject::getInstance();
zakładając, że MyObject
jest funkcją Singleton i getInstance()
jest dostępna.
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() {
}
}
- 1. CakePHP - Błąd krytyczny: Zadzwoń do niezdefiniowanej funkcji
- 2. Błąd krytyczny: Zadzwoń do niezdefiniowanej funkcji mysqli_result()
- 3. Zadzwoń do prywatnej metody klasy z metody prywatnej instancji
- 4. Błąd krytyczny: Zadzwoń do niezdefiniowanej funkcji mysql_connect() w
- 5. PHP Błąd krytyczny: Zadzwoń do formatu funkcji członka() na logicznych
- 6. file_get_html wyświetla Błąd krytyczny Zadzwoń do niezdefiniowanej funkcji
- 7. Błąd krytyczny: Używanie $ this, gdy nie w kontekście obiektu
- 8. Błąd: "zlib" jest nieprawidłowym poleceniem
- 9. Błąd krytyczny: wywołanie niezdefiniowanej funkcji: ldap_connect()
- 10. błąd CodeIgniter: Zadzwoń do niezdefiniowanej funkcji mysql_pconnect()
- 11. Construct predykatów z obiektywami
- 12. Błąd krytyczny PHP, Gruszka?
- 13. Błąd: Zadzwoń do niezdefiniowanej metody addAttributeToFilter()
- 14. Błąd krytyczny RockMongo
- 15. PHPUnit: Błąd krytyczny obsługi
- 16. Symfony błąd krytyczny
- 17. PHP: Błąd krytyczny wyzwalacza?
- 18. Zadzwoń do href z JavaScript
- 19. Test PHP na błąd krytyczny
- 20. Komunikat o błędzie: Błąd krytyczny: nie można użyć funkcji return> wartość w kontekście zapisu w
- 21. Błąd krytyczny: wywołanie funkcji członka
- 22. Błąd krytyczny: Korzystanie $ to, gdy nie jest w kontekście obiektu w
- 23. Błąd krytyczny RecursiveIteratorIterator Nie znaleziono
- 24. losowe zdarzenie mongorestore (błąd krytyczny)
- 25. Błąd krytyczny w funkcji money_format
- 26. Co się dzieje, gdy daję MyObject obj = new MyObject()
- 27. Scala Trawienie Wykorzystanie MyObject -> Array [Byte] -> MyObject
- 28. Construct pojemnik z listy inicjatora iteratorów
- 29. brak ostrzeżenia kompilatora z nieprawidłowym nawiasów inicjatora
- 30. Błąd krytyczny: wywołanie niezdefiniowanej funkcji imap_open() w PHP
tworzenie nowego obiektu będzie zawsze wywoływać konstruktora. – Lukman