![]() |
![]() ![]() |
![]() |
![]()
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.
-------------------- "Każdy działający program jest przestarzały"
|
|
|
![]()
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.
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
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%) ![]() ![]() |
A mi wydaje się, że sposób pierwszy jest najlepszy. Nowy formularz = nowa instancja klasy. A jak w drugiej funkcji chcesz użyć instancji, na której przed chwilą wykonywałeś jakieś operacje? -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
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%) ![]() ![]() |
i później w klasie używasz $this->form zamiast global. -------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]()
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
![]() 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%) ![]() ![]() |
![]() ![]() ![]() ![]() 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. -------------------- Nie lubię jednorożców.
|
|
|
![]()
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?
-------------------- "Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
|
|
|
![]()
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
![]() -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 14:29 |