![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 4 Dołączył: 9.06.2007 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Ostatnio nasunęło mi się pytanie odnośnie programowania obiektowego w PHP (a i chyba ogólnie). Załóżmy że mamy plik index.php
Dodatkowo jest klasa z formularzami:
Teraz w funkcji1 chcemy stworzyć jeden formularz i w funkcji2 chcemy stworzyć jeden formularz. czyli
Można zrobić też w drugi sposób tzn index.php by wyglądał
a Pages:
Przy czym z użytkowego punktu widzenia nie ma to żadnego znaczenia. W tej klasie nie ma żadnej zmiennej statycznej, którą można by wymieniać między poszczególnymi funkcjami. Chciałem się zapytać która z tych opcji jest właściwa i która należało by używać. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 3 Dołączył: 15.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie lubie używać global w php, wiec w klasie Pages dodałbym pole typu Forms.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Przekazuj obiekt do klasy ktora ma go pozniej uzyc.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 50 Dołączył: 28.10.2006 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
A mi wydaje się, że sposób pierwszy jest najlepszy. Nowy formularz = nowa instancja klasy.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A jak w drugiej funkcji chcesz użyć instancji, na której przed chwilą wykonywałeś jakieś operacje? A no właśnie zależy od zamierzeń użycia. 1. Jeśli chce w każdej metodzie tworzyć nowy form i na nim operować. 2. Jeśli chce operować na jednym formie to wtedy przekazanie obiektu.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 32 Dołączył: 24.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli jesteś pewien że będziesz używać tylko jednego egzeplarza klasy Form, to skorzystaj z singleton.
I robisz:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 4 Dołączył: 9.06.2007 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
singletonu używam do baz danych (logera itp), tutaj też jest możliwe aby go zastosować, w sumie to można by go zastosować przy każdej z klas (IMG:style_emoticons/default/smile.gif) .
Właśnie chciałem zobaczyć jak to robicie Wy i jakie są Wasze propozycje. Jeśli mam w dwóch miejscach użyć tej samej zmiennej (są od siebie zależne) to musi być to ta sama klasa, w tym klasach o których mi się rozchodzi, nie ma takiej potrzeby są to tylko generatory tabel, formularzy, rzeczy od siebie nie zależnych. Jeśli chodzi o przekazywanie obiektu i singleton, to która z nich jest szybsza? bo jeśli chodzi o miejsce w pamięci przy przetwarzaniu skryptu, raczej będzie takie samo. Ten post edytował grzemach 19.08.2009, 11:03:25 |
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
(IMG:style_emoticons/default/sciana.gif) (IMG:style_emoticons/default/sciana.gif) (IMG:style_emoticons/default/sciana.gif) (IMG:style_emoticons/default/sciana.gif)
Nie potrzebujesz tu singletonu. Rozwiazanie zalezy od tego co ty robisz, czym jest Page, czym Form (po co one sa, co robia, co reprezentuja), jak ze soba wspolpracuja itd. Bez tej wiedzy nic dobrego nie stworzysz. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dependency Injection (@Fafu podał to rozwiązanie) - klik
Poprostu przekazujesz referencję obiektu (Form) do innego obiektu (Pages) poprzez konstruktor, metodę dostępową (setter, np. setForm()) lub też publiczną składową (odradzane). @deirathe - ten Twój singleton jest trochę kulawy (publiczny konstruktor, nie będe się już czapiał możliwości klonowania bo przykład miał zapewne być okrojony, ale lepiej zmień modyfikator przy konstruktorze z public na private/protected) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 9 Dołączył: 28.08.2006 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego przez publiczną składową odradzane?
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Żadna klasa nie powinna mieć publicznych składowych, powód - hermetyzacja danych, czyli jedna z podstawowych zasad OOP. Są również inne argumenty na to, ale nie chce mi się ich przytaczać, bo by wyszedł z tego przydługawy post, którego pisać mi się nie chce (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 02:22 |