![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam pewien dylemat dotyczący konstruktora i parametrów metody. Mam klasę Auth a w niej konstruktor który za parametry przyjmuje $login, $password, $email, $connect. Rozmawiając z moderatorem tego forum (blooregard) powiedział mi, że najlepiej gdyby konstruktor był wywoływany już przy utworzeniu obiektu. Bo wtedy wiadomo o jakie zmienne chodzi np. $this->login = $login Ale może pokażę na przykładzie:
Problem polega na tym, że wywołując konstruktor muszę mieć przekazywane jako parametry tego konstruktora, ale co jeśli dopiero chcę utworzyć obiekt i jeszcze nic nie mam a dopiero później są przekazywane jakieś wartości? Mówię tu o późniejszym wykorzystaniu metod np. Login gdzie potrzebuję $login, $password, $connect. Najpierw wypadałoby wywołać obiekt klasy, a następnie później wywoływać potrzebne metody. Klasa bez konstruktora jest dobrą klasą? Czy umieszczanie na początku każdej metody $this->login = $login; to dobre rozwiązanie w momencie gdy usunę konstruktor? Bo pisząc kod przypomina to trochę pisanie pisanie najzwyklejszych funkcji oprawionych w obiektówkę... Dopiero zaczynam z obiektowym PHP i jeśli możecie to proszę o jak najprostsze wyjaśnianie pewnych rzeczy (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 130 Pomógł: 11 Dołączył: 7.04.2003 Ostrzeżenie: (10%) ![]() ![]() |
Rozumiem... Pewnie ilu programistów tyle zwolenników jednej czy drugiej metody ale która jest najlepsza? Najbardziej optymalna, właściwa, poprawna? Jeżeli twoje pytanie jest czysto teoretycznie to odpowiedź jest prosta. Konstruktor jest DOBRY, setter jest ZŁY. Zdecydowanie. Argument którego użyłeś ,że chciał bys najpierw zrobić coś z obiektem a dopiero potem ustawić jego stan (jakąś jego zmienną) jest postawieniem sprawy na głowie. To jak byś powiedział: "Chciał bym najpierw pojeździć samochodem a dopiero potem do niego wsiąść." (IMG:style_emoticons/default/smile.gif) . W większości przypadków należy inicjalizować co się da w konstruktorze. Jeżeli widzisz sytuacje w której twój obiekt może się obejść bez części zainicjalizowanych pól to najprawdopodobnej próbujesz stworzyć jeden obiekt tam gdzie powinienś tworzyć dwa (lub więcej). W praktyce sam urzywam setterów jeśli trzeba dokoptować jakąś funkcjonalność do obiektu. Jeśli mam czas i okazje na refaktoring to rozbijam obiekty, a settery tępie jak karaluchy (IMG:style_emoticons/default/smile.gif) , mało który się uchowa... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 10:55 |