Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dylematy początkującego, konstruktor vs parametry metody
bl4ck_b0x
post
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:
  1. <?php
  2. class Auth
  3. {
  4. private $login;
  5. private $password;
  6. private $connect;
  7. private $email;
  8.  
  9. public function __construct($login, $password, $email, $connect)
  10. {
  11. $this->login = $login;
  12. $this->password = $password;
  13. $this->email = $email;
  14. $this->connect = $connect;
  15. }
  16.  
  17. #Rejestracja
  18. public function Register($login, $password, $email, $connect)
  19. {
  20. #kod
  21. }
  22.  
  23. #Logowanie
  24. public function Login($login, $password, $connect)
  25. {
  26. #kod
  27. }
  28.  
  29. #Przypomnienie hasła
  30. public function LostPassword($email, $connect)
  31. {
  32. #kod
  33. }
  34.  
  35. #Wylogowanie
  36. public function Logout()
  37. {
  38. #kod
  39. }
  40. }
  41.  
  42. ?>


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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
smentek
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat(bl4ck_b0x @ 3.04.2010, 19:40:34 ) *
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...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 10:55