![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
W programie napisanym w jakimś języku programowania, utworzony obiekt istnieje dopóki nie zostanie zniszczony. W php zmienne, obiekt istnieje dopóki skrypt nie zakończy działania albo nie zostanie zniszczony. To jest problem, który nie do końca mogę zrozumieć, abo inaczej sposób jego rozwiązania. Weźmy pierwszy lepszy przykład, przy którym ten problem dla mnie znowu się uwidocznił. Zastosowanie wzorca registry. Przypomniałem sobie ten wzorzec z artykułu http://www.strefaphp.net/artykul59.html
Załóżmy, że w pliku głównym index.php, zaraz po wystartowaniu aplikacji, wczytywana jest konfiguracja systemu:
dzięki czemu mamy łatwy dostęp do konfiguracji:
Następnie tworzone jest menu, etc. Użytkownik wybiera jakąś opcje z menu, kontroler oddaje działanie do modelu, a wyniki zwracane są do widoku. Sedno sprawy: Jak sprawić, żeby w każdym skrypcie (przecież model jest w innym skrypcie, widok w innym), te dane były dostępne? Żeby w każdym skrypcie nie trzeba było tworzyć instancji obiektu Registry i nie ładować do niego danych? Każdą inną klasę, która będzie korzystać z obiektu Registry tak projektować, żeby jako parametr konstruktora mogła przyjmować obiekt Registry? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak sprawić, żeby w każdym skrypcie (przecież model jest w innym skrypcie, widok w innym), te dane były dostępne? Żeby w każdym skrypcie nie trzeba było tworzyć instancji obiektu Registry i nie ładować do niego danych? Można to zastosować przez uzycie wzorca singleton (Chyba zazębiliśmy się z innym tematem)
lub poprzez utworzenie rejestru na bazie metod statycznych:
Wydaje mi sie ze dopiero teraz poznałeś co to singleton ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Można to zastosować przez uzycie wzorca singleton (Chyba zazębiliśmy się z innym tematem)
Idąc Twoim tokiem rozumowania, każda klasa powinna implementować wzorzec singleton, bo przecież w programowaniu obiektowym nie chodzi tylko o tworzenie klas ale także sposób wpsółpracy tych obiektów. I o to właśnie pytam.. Przykład: Masz klasę (np. Data) do pobierania danych z jakiegoś źródła: baza, plik tekstowy, plik xml,itp. Oraz klasę do wyświetlania tych wyników (np. View). Tworzysz obiekt View a w nim obiekt Data i np za pomocą foreach wyświetlasz te dane - proste. Ale co zrobić, jeśli tworzysz jakiś obiekt w skrypcie index.php i dane zebrane przez ten obiekt chcesz przekazać (chcesz żeby były dostępne) w skrypcie listOfWorkers.php ? (może nie najlepszy przykład ale o coś takiego mi chodzi) -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
Cytat Idąc Twoim tokiem rozumowania, każda klasa powinna implementować wzorzec singleton, bo przecież w programowaniu obiektowym nie chodzi tylko o tworzenie klas ale także sposób wpsółpracy tych obiektów. I o to właśnie pytam.. rejestr w systemie masz jeden i do niego jak do worka wsadzasz obiekty które potrzebne Ci są wszędzie. obiektów data do pobierania danych mozesz miec kilka np:
a potem sobie na nich operujesz w jakistam przykładowy sposob. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
rejestr w systemie masz jeden i do niego jak do worka wsadzasz obiekty które potrzebne Ci są wszędzie. obiektów data do pobierania danych mozesz miec kilka np:
a potem sobie na nich operujesz w jakistam przykładowy sposob. Czyli wychodzi na to, że jedynym słusznym rozwiązaniem jest stosowanie wzorca registry? A tak rzadko go spotykam.. Bo myślałem nad innym sposobme ale nie wiem na le to jest zgodne z programowaniem OOP. Mamy jakiś obiekt np. Data i chcąc go przekazać do obiektu View, tworzymy klasę View w taki sposób aby construktor View przyjmował Data jako parametr. np;
dzięki czemu w obiekcie oView mamy dostęp do obiektu oData. Czy to sposób jest prawidłowy? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Jak najbardziej prawidłowy. Ja u siebie jeszcze nie uzyłem registry do przechowywania instancji. Jak mi są potrzebne to przekazuje jako parametr. Natomiast przydatne jest załadowanie instancji do registry w przypadku gdy z tego obiektu korzystasz duzo dalej, po drodze wywolujac kilka nowych klas itp. Wtedy pilnowanie instancji jest trudne i niewygodne
![]() -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jak najbardziej prawidłowy. Ja u siebie jeszcze nie uzyłem registry do przechowywania instancji. Jak mi są potrzebne to przekazuje jako parametr. No to super bo dla mnie jest to całkiem logiczne. Natomiast przydatne jest załadowanie instancji do registry w przypadku gdy z tego obiektu korzystasz duzo dalej, po drodze wywolujac kilka nowych klas itp. Wtedy pilnowanie instancji jest trudne i niewygodne ![]() No dobra ale ładujesz do registry i tą tablice zapisujesz gdzieś do bazy, pliku? No bo jeśli gdzieś dalej tego będziesz potrzebował to obiekt już dawno nie istnieje.. I co wtedy trzeba te dane wczytać albo utworzyć registry i znowu go załadować ale to bez sensu.. Chyba, że obiekt Registry przekazujesz jako parametr do każdej klasy.. żeby go utrzymać przy życiu.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Registry jest klasą złozonych z samych static, tak wiec nie tworzysz w ogole instancji tej klasy
![]() ![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Registry jest klasą złozonych z samych static, tak wiec nie tworzysz w ogole instancji tej klasy ![]() ![]() Nie wiedziałem. Oblookałem przykład na http://www.strefaphp.net/artykul59.html i chyba tam jest błąd. Nie powinno być static $aVars ? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Tzn tak. Nie dopowiedziałem wszystkiego. Registry moze byc zbudowany w oparciu o wzorzec Singleton
![]() Musisz na spokojnie wszystko przeanalizowac, co by ci sie całkiem nie pomieszało ![]() http://maxprogram.pl/readarticle.php?article_id=78 tu sa wzorce ciekawie opisane ![]() -------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Registry nie musi być klasa statyczną : )
@J4r0d - w którymś topiku właśnie pisałem Tobie, że zalety Singletona odkrywasz przy dużym systemie : ) Rejestr to po prostu obiekt udostępniający inne obiekty (względnie zmienne). Sam rejestr albo przekazujesz jako argument (możesz wymusić typ), albo używasz Singletona : )
Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
@J4r0d - w którymś topiku właśnie pisałem Tobie, że zalety Singletona odkrywasz przy dużym systemie : ) Ciężko mi to sobie wyobrazić.. Rejestr to po prostu obiekt udostępniający inne obiekty (względnie zmienne). Sam rejestr albo przekazujesz jako argument (możesz wymusić typ), albo używasz Singletona : )
Pozdrawiam. No tak ale i tak wszystko sprowadza się do przekazywania obiektu do innego obiektu w postaci parametru. Właśnie to chciałem wiedzieć ![]() Ten post edytował J4r0d 16.01.2007, 11:48:54 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Yh? Jest różnica, bo można też tak i można olać argumenty funkcji : )
Właśnie po to robimy z Registry Singletona, żeby przypadkiem nie dostać nowego obiektu Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:49 |