![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
Witam,
właśnie uczę się o wzorcu singleton. W teorii już wiem o co tam chodzi. Byłbym wdzięczny jakby ktoś lakonicznie przedstawił jak używać tego w praktyce (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Mam główny kontroler, w którym na samym początku powinno być ustalane publiczne pole $this->load (może nie tyle co powinno, ale mam takie założenie), do którego przypisywana jest klasa ładowania innych. Na samym początku, gdy mam wyłowywany kod, gdzie wszystkie składowe FW są zbierane do kupy, dołączane pliki, ustawienia itd, w pewnym momencie ładuje plik Głownego kontrolera po czym kontroler wywołany patrząc na URL. Ogólnie rzecz biorąc, wszystkie mniejsze kontrolery dziedziczą po tym głównym, w którym właśnie jest funkcja get_instance() oraz gdzie w konstruktorze jest przypisywane to pole. I wszystko było dobrze. Tworzyłem nowy obiekt głównego kontrolera, tego który dziedziczy gówny kontroler a w nim miałem już wszystko co potrzebne do aplikacji (bo wszystko co potrzebne miałem już robione w konstruktorze). Ale gdy zrobiłem prywatny konstruktor w głównym kontrolerze, mimo, że odwołuję się do instancji Main_Controller::get_instance();, nic się nie dzieje, tak, jakby ta funkcja była pusta, nie mogę tworzyć pól tej klasy, a metody są niewidoczne. A to, że konstruktor jest prywatny, nie mogę odwołać się do klasy przez new. Później jak już tworzę obiekt właściwego kontrolera to wyskakują mi same błędy, że nie można użyć $this, albo że nie ma pola $this->load itd.
Może nie jestem świetny w tych sprawach, ale wystarczy mi odrobina tekstu dobrze napisanego a sam do tego dojdę, dlatego tak jest a nie inaczej. PS. Jeśli nie powinno sie uzywać publicznego konstruktora w głównym kontrolerze, to tak mnie zastanawia fakt wykorzystania tego w CodeIgniterze. Skoro Wy twierdzicie, że nie powinno się tak robić to dlaczego projektanci poszli na to? Może dla tego, że tak jest prościej? Bo faktycznie, z publicznym kontruktorem wystarczy wywołać new Main_Controller() i już mamy wszystko załatwione, a z prywatnym mam bardzo problem i nawet nie wiem jak się za niego zabrać (IMG:style_emoticons/default/mad.gif) Ten post edytował adbacz 16.10.2011, 22:51:04 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 20:27 |