Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] konstruktor ?
piraciq
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam,

Może to i nie miejsce na to, a może i tak? Takie pytanie teoretycznie:

Czy w konstruktorze klasy należy umieszczać wszystkie dane które trafiają do klasy czy tylko te które ulegają przetworzeniu przez tą klasę??

pozdrawiam
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 26)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Takie które trafiają do klasy przy tworzeniu obiektu.
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Konstruktor klasy służy do skonstuowania obiektu. Co oznacza że powinieneś przekazać do niego tylko te dane, która są wymagane do powstania instancji.
Go to the top of the page
+Quote Post
piraciq
post
Post #4





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


dajmy na to przy rejestracji usera::


login haslo w zasadzie tyle wystarczy prawda (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

ale jesli mamy w formularzu rejestracji inne pola (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) komunikator stronę www??
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(piraciq @ 14.07.2008, 15:46:47 ) *
dajmy na to przy rejestracji usera::
login haslo w zasadzie tyle wystarczy prawda (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Źle.

Załóżmy że rejestrujesz za pomocą klasy User. Do stworzenia takiego obiektu wcale nie potrzebujesz hasła czy loginu.
Powinno byc raczej rak:
  1. <?php
  2.  
  3. /* @var $user User */
  4. $user = new User();
  5. $user->setName('użytkownik');
  6. $user->setPassword('hasło');
  7. $user->registerNewUser();
  8.  
  9. ?>
Go to the top of the page
+Quote Post
piraciq
post
Post #6





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(mike @ 14.07.2008, 16:00:50 ) *
Źle.

Załóżmy że rejestrujesz za pomocą klasy User. Do stworzenia takiego obiektu wcale nie potrzebujesz hasła czy loginu.
Powinno byc raczej rak:
  1. <?php
  2.  
  3. /* @var $user User */
  4. $user = new User();
  5. $user->setName('użytkownik');
  6. $user->setPassword('hasło');
  7. $user->registerNewUser();
  8.  
  9. ?>

chodzi mi o sam konstruktor klasy "user" co w takim przypadku powinno sie w nim znajdować bo z tego co Ty napisałeś domyślam się, że w konstruktorze się nic nie znajduje tak (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

  1. <?php
  2. public function __construct
  3. {}
  4. ?>
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


W podanym przez Ciebie przykładzie tak, konstruktor byłby pusty. Ale to wszystko zależy czym u Ciebie jest User i jak działa.
Wystarczy przykład lekko zmodyfikować i masz konstruktor wypełniony.
  1. <?php
  2.  
  3. class User {
  4. private $name;
  5. private $password;
  6. private $gg;
  7. // ... etc
  8.  
  9. public function __construct($id = null) {
  10. if ($id !== null) {
  11. $user = User::retrieveById($id);
  12. $this->fillUser($user);
  13. }
  14. }
  15.  
  16. public static function retrieveById($id) {
  17. // funkcja pobiera z bazy danych użytkownika i zwraca go jako obiekt
  18. }
  19.  
  20. public function fillUser(User $user) {
  21. // funkcja wypełnia pola obiektu polami z przekazanego obiektu;
  22. }
  23.  
  24. }
  25.  
  26. ?>

I teraz możesz zrobić:
  1. <?php
  2.  
  3. // nowy użytkownik
  4. $newUser = new User();
  5.  
  6. // pobranie istniejącego użytkownika
  7. $existingUser = new User(12);
  8. // wykonanie poyższego konstruktowa byłoby tym samym co:
  9. $existingUser = User::retrieveById(12);
  10. // ale to w końcu przykład
  11.  
  12. ?>



Jak widzisz do konstruktora przekazuje się to co jest potrzebne a nie tyle ile się da. Czasem oczywiście do stworzenia obiektu nic nie jest potrzebne.
Wtedy konstruktor nic nie robi. i może być pusty lub w ogóle może go nie być.
Go to the top of the page
+Quote Post
piraciq
post
Post #8





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Dzięki za nakierowanie mnie :]

jeśli napotkam na jakieś pytania napiszę jeszcze raz dzieki
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #9





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


To co podał mike jest ładnym przykładem (sam bym podał gdybym był wcześniej, ach ten Propel (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ), ale ogólnie zasiada jest taka, że projektujesz sobie jakiś obiekt, i wiesz że nie może on zacząć działać bez pewnych danych, więc aby wymusić aby zawsze były, przyjmujesz w konstruktorze.
Tak jak masz definicję klasy obsługującej jedno połączenie, to wiadomo, że potrzebne jest do czego się łączy (czy to soap czy pdt ), oczywiście można dać metodę która to ustawia, ale przez to zawsze musiał byś sprawdzać czy już zostało podane, czy jeszcze nie. Ale jest zasada, konstruktor (jak i każda metoda) muszą być jak najprostsze, czyli jak już coś przyjmujesz, to staraj się jak najmniej, tyle ile jest niezbędne.

Ten post edytował Sedziwoj 14.07.2008, 20:32:39
Go to the top of the page
+Quote Post
piraciq
post
Post #10





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W przypadku klas do obsługi baz danych to jest dla mnie zrozumiałe co się znajduje w konstruktorze klasy. Ale właśnie mam problem ze zrozumieniem tej filozofii kiedy przekazywać dane do konstruktora a kiedy nie?? Jest na to jakaś reguła czy nie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Jest reguła. Powtórzę: przekazujesz to co jest niezbędne.
A niewiele rzeczy jest niezbędnych, więc staraj się być minimalistą w tym zagadnieniu.
Go to the top of the page
+Quote Post
piraciq
post
Post #12





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No to zobaczymy co mi z tego wyjdzie :]

  1. <?php
  2. class register extends sql
  3. {
  4.  
  5.  
  6. public function __construct($email,$pass,$pass_replace,$nick,$minlenghtpass)
  7. {
  8. $this->user_email=trim($email);
  9. $this->user_pass=trim($pass);
  10. $this->user_pass_replace=trim($pass_replace);
  11. $this->user_nick=trim($nick);
  12. $this->minlenghtpass=$minlenghtpass;
  13. }
  14. private function licz_wiersze($query)
  15. {
  16. return mysql_num_rows($query);
  17. }
  18. public function sprawdz_email_w_bazie($email)
  19. {
  20.  
  21. $zap=$this->query("select user_email from users where user_email='".$this->user_email."'");
  22. return $this->licz_wiersze($zap);
  23.  
  24. }
  25.  
  26. public function poprawnosc_email ($email)
  27. {
  28. if (eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$",$email))
  29. {
  30. return true;
  31. }
  32. else
  33. {
  34. return false;
  35. }
  36.  
  37. }
  38. public function dlugosc_hasla ($pass)
  39. {
  40. if (strlen($pass)<=$this->minlenghtpass)
  41. {
  42. return false;
  43. }
  44. else
  45. {
  46. return true;
  47. }
  48. }
  49. public function sprawdzanie_hasla($pass,$pass_replace)
  50. {
  51.  return ($this->user_pass==$this->user_pass_replace ? true : false )
  52.  
  53. }
  54.  
  55. }
  56.  
  57. $register= new register($_POST['email'],$_POST['pass'],$_POST['pass_replace'],$_POST['nick'],'5');
  58. ?>


i czy tu jest za dużo zmiennych przekazywanych do konstruktora (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował piraciq 17.07.2008, 14:13:15
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #13





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie, może być tak, choć ja bym się zastanowił nad przekazaniem tablicy zamiast osobnych argumentów.
Taka rejestracja ma charakter potencjalnie zmienny, więc array byłby na pewno lepszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam.
Go to the top of the page
+Quote Post
wlamywacz
post
Post #14





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

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


Łatwiej chyba takie coś:
  1. <?php
  2. public function setParam($name, $param) {
  3.  
  4. $this->$name = $param;
  5. }
  6.  
  7. $db = new db;
  8. $db->setParam('user', $ini_array['mysql']['user']);
  9. $db->setParam('pass', $ini_array['mysql']['pass']);
  10. $db->setParam('name', $ini_array['mysql']['name']);
  11. $db->setParam('host', $ini_array['mysql']['host']);
  12. $db->connect();
  13. ?>


Poza tym nie rozumiem czemu dziedziczysz klasę odpowiedzialną za bazę danych ?

Ten post edytował wlamywacz 17.07.2008, 19:24:04
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #15





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@piraciq
Pomijam konstruktor, bo jak patrzę na takie coś, to się zastanawiam po co ten obiekt, chyba tylko aby był.
Przecież jak tworzysz obiekt, to po to aby ułatwić sobie życie, a to co prezentujesz, to zebranie funkcji i zmiennych w jedno pudełko.
Co do propozycji tablicy, to moim zdaniem jest to nie eleganckie, wiadomo jak obiekt obrabia dane z POST/GET to ma tablice, ale dalej dane o konkretnej strukturze, powinny być inaczej rozpowszechniane. Czy to przez obiekt danych (w tym przypadku, nadmiar formy, nad treścią), czy też po prostu przekazywane pojedynczo przez set'ery. A taki obiekt rejestracji jak dostaje te dane to od razu je sprawdza, czy są poprawne, nie ktoś kto go używa ma sam "uruchamiać" sprawdzanie.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #16





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Może i tablica do konstruktora to nie najlepszy pomysł, ale już tablica przez setter wydaje mi się sensowna. Sprawdzasz wtedy strukturę takiej tablicy i masz wszystko w jednym miejscu. Troszkę jak propelowe fromArray() przy wypełnianiu obiektu. Uważam, że zwłaszcza przy obiektach, które nie są udostępniane użytkownikowi jako interfejs, takie coś doskonale przyspiesza. Można się też pokusić o specjalny obiekt zamiast tablicy - Parameters (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
heh, tylko po co tutaj...
Go to the top of the page
+Quote Post
piraciq
post
Post #17





Grupa: Zarejestrowani
Postów: 174
Pomógł: 4
Dołączył: 27.07.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(wlamywacz @ 17.07.2008, 20:22:01 ) *
Łatwiej chyba takie coś:
  1. <?php
  2. public function setParam($name, $param) {
  3.  
  4. $this->$name = $param;
  5. }
  6.  
  7. $db = new db;
  8. $db->setParam('user', $ini_array['mysql']['user']);
  9. $db->setParam('pass', $ini_array['mysql']['pass']);
  10. $db->setParam('name', $ini_array['mysql']['name']);
  11. $db->setParam('host', $ini_array['mysql']['host']);
  12. $db->connect();
  13. ?>


Poza tym nie rozumiem czemu dziedziczysz klasę odpowiedzialną za bazę danych ?

to był przykład książkowy dziedziczenie klas, każde wskazówki są mile widziane :]
dzięki

opierałem się na tym
Go to the top of the page
+Quote Post
Neojawor
post
Post #18





Grupa: Zarejestrowani
Postów: 106
Pomógł: 1
Dołączył: 2.12.2005
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


może trochę się czepiam i nie na temat, ale masz kod:
  1. <?php
  2. private function licz_wiersze($query)
  3.    {
  4.        return mysql_num_rows($query);
  5.    }
  6. ?>

wszystko w nim dobrze, ale mysql_num_rows wymaga jako parametru wyniku zapytania, a parametr $query sugeruje, że będziesz chciał tam wsadzić treść zapytania.

Wracając do tematu, to register nie pasuje mi na klasę. Klasa ma być opisem jakiejś rzeczywistej rzeczy, a register to czynność. IMHO bardziej pasuje tu stworzenie klasy user, który będzie miał metodę register dodającą obiekt tej klasy do bazy.
Go to the top of the page
+Quote Post
mecenas
post
Post #19





Grupa: Zarejestrowani
Postów: 80
Pomógł: 5
Dołączył: 23.09.2008
Skąd: Chełmno/Toruń

Ostrzeżenie: (0%)
-----


w kwestii konstruktora - jest to kwintesencja OOP i w zasadzie bez tego nie można mówić o obiektowości.
Jaki jest sens konstruktora w oderwaniu od baz danych? Ma dokładnie takie samo znaczenie. W razie poważniejszych problemów ze zrozumieniem tego polecam lekturę teorii innych języków obiektowych - być może wyjście z poletka php ułatwi zadanie, a przecież w wielkim stopniu język jest sprawą wtórną (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

btw - witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #20





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Również witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
w kwestii konstruktora - jest to kwintesencja OOP i w zasadzie bez tego nie można mówić o obiektowości.

Czyli jak nie ma konstruktora, to nie ma OOP? Wybacz, ale jestem w stanie napisać kod w pełni obiektowy bez użycia choćby jednego konstruktora, więc dziwne masz to kryterium obiektowości.
Go to the top of the page
+Quote Post
mecenas
post
Post #21





Grupa: Zarejestrowani
Postów: 80
Pomógł: 5
Dołączył: 23.09.2008
Skąd: Chełmno/Toruń

Ostrzeżenie: (0%)
-----


zależy co rozumiesz przez konstruktor - bo w najogólniejszym przypadku jakikolwiek program bez konstruktora nie miałby najmniejszego sensu, bo... generalnie po cóż program bez zmiennych? Oczywiście w tym momencie można by się przyczepić, że w takim ogólnym znaczeniu konstruktory przecież funkcjonują we właściwie każdym języku, niezależnie od metody programowania...

Masz rację, może niezbyt precyzyjnie się wyraziłem. Zakładam, że chodzi Ci o własne konstruktory tworzonych przez programistę klas. A i owszem, można pisać obiektowo bez wykorzystania konstruktorów, tylko po co? Wydaje mi się i nie jestem odosobniony w tej opinii, że to miała być jedna z podstawowych zalet takiej filozofii programowania.

Może powinniśmy przed rozpoczęciem dyskusji zdefiniować czym dla nas jest obiekt? Dla mnie jest to typ (niekoniecznie złożony) wraz z jego metodami...

Oczywiście wszelkie dywagacje wolałbym dla własnego bezpieczeństwa oderwać od języka.

Ten post edytował mecenas 24.09.2008, 13:58:18
Go to the top of the page
+Quote Post
mike
post
Post #22





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(mecenas @ 24.09.2008, 14:54:31 ) *
zależy co rozumiesz przez konstruktor - bo w najogólniejszym przypadku jakikolwiek program bez konstruktora nie miałby najmniejszego sensu, bo... generalnie po cóż program bez zmiennych?
Zdecyduj się o czym piszesz. O konstruktorach czy o zmiennych. To są całkiem inne pojęcia.
Cytat(mecenas @ 24.09.2008, 14:54:31 ) *
A i owszem, można pisać obiektowo bez wykorzystania konstruktorów, tylko po co? Wydaje mi się i nie jestem odosobniony w tej opinii, że to miała być jedna z podstawowych zalet takiej filozofii programowania.
Po to samo jak w każdym innym przypadku. I jeśli chodzi o moją opinię to konstruktory nie zawsze są potrzebne. Nie można mowić, że paradygmaty OOP wymagają ich istnienie.
Inna sprawa, że świadomy programista powinien ich używać. Czasem nawet jeśli mają być puste.
Cytat(mecenas @ 24.09.2008, 14:54:31 ) *
Może powinniśmy przed rozpoczęciem dyskusji zdefiniować czym dla nas jest obiekt? Dla mnie jest to typ złożony wraz z jego metodami...
Obiekt to byt złożony danych i metod które definiują zachowanie obiektu. Dodatkowo każdy obiekt jest reprezentacją pewnej klasy oraz jest identyfikowalny.


Konstruktor nie zawsze jest potrzebny. Jak sama jego nazwa służy on do konstruowania obiektu na jego starcie. A nie zawsze jest taka konieczność. Wobraź sobie obiekt, który jest zaprojektowany to operacji na innym obiekcie. Możesz go napisać tak by posiadał tylko metodę do przekazania mu danych i metody, które operują na danych. Konstruktor może być zbędny.
Go to the top of the page
+Quote Post
mecenas
post
Post #23





Grupa: Zarejestrowani
Postów: 80
Pomógł: 5
Dołączył: 23.09.2008
Skąd: Chełmno/Toruń

Ostrzeżenie: (0%)
-----


Cytat(mike @ 24.09.2008, 15:05:00 ) *
Zdecyduj się o czym piszesz. O konstruktorach czy o zmiennych. To są całkiem inne pojęcia.

Chodzi o powiązanie konstruktora i zmiennej i fakt, ze przy tworzeniu każdej zmiennej de facto konstruktor zawsze jest używany i tylko o to mi chodziło w tym momencie. Doskonale wiem jaka jest różnica (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat(mike @ 24.09.2008, 15:05:00 ) *
I jeśli chodzi o moją opinię to konstruktory nie zawsze są potrzebne. Nie można mowić, że paradygmaty OOP wymagają ich istnienie.

Faktycznie tak zabrzmiała moja wypowiedź. Oczywiście, implementacja konstruktora nie jest warunkiem koniecznym do uznania kodu za obiektowy, ale...
Tutaj dochodzimy do wspólnego punktu widzenia:
Cytat(mike @ 24.09.2008, 15:05:00 ) *
Inna sprawa, że świadomy programista powinien ich używać. Czasem nawet jeśli mają być puste.

I w zasadzie tu tkwi cały sens tego wszystkiego - skoro mamy takie dobrodziejstwo, skoro tak wskazują wytyczne - nazwijmy to - 'sztuki programowania', to czemu tego nie robić?

Cytat(mike @ 24.09.2008, 15:05:00 ) *
Obiekt to byt złożony danych i metod które definiują zachowanie obiektu. Dodatkowo każdy obiekt jest reprezentacją pewnej klasy oraz jest identyfikowalny.

Zgoda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat(mike @ 24.09.2008, 15:05:00 ) *
Konstruktor nie zawsze jest potrzebny. Jak sama jego nazwa służy on do konstruowania obiektu na jego starcie. A nie zawsze jest taka konieczność. Wobraź sobie obiekt, który jest zaprojektowany to operacji na innym obiekcie. Możesz go napisać tak by posiadał tylko metodę do przekazania mu danych i metody, które operują na danych. Konstruktor może być zbędny.

Jasne, że może być zbędny, ale jest to jednak dość specyficzny przypadek, nie sądzisz?
Go to the top of the page
+Quote Post
Crozin
post
Post #24





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Chodzi o powiązanie konstruktora i zmiennej i fakt, ze przy tworzeniu każdej zmiennej de facto konstruktor zawsze jest używany
  1. <?
  2. $zmienna = 'wartosc';
  3. ?>
Nie widzę tu nigdzie wywołania, żadnego konstruktora. Może chodzi Ci o
  1. <?
  2. $obj = new abcdef();
  3. ?>
Ale tutaj nazwanie $obj zmienna jest trochę dziwne. No i konstruktor nie zawsze jest używany. Jedynie wtedy, gdy jest on zaimplementowany w klasie/klasie rodzicu.
Cytat
Jasne, że może być zbędny, ale jest to jednak dość specyficzny przypadek, nie sądzisz?
Nie, nie jest to dość specyficzny przypadek.
Go to the top of the page
+Quote Post
mecenas
post
Post #25





Grupa: Zarejestrowani
Postów: 80
Pomógł: 5
Dołączył: 23.09.2008
Skąd: Chełmno/Toruń

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 24.09.2008, 21:49:47 ) *
  1. <?php
  2. $zmienna = 'wartosc';
  3. ?>

Nie widzę tu nigdzie wywołania, żadnego konstruktora.

To, że nie widać jawnie wywołania konstruktora nie oznacza, że takowe się nie odbywa. W takim przypadku zajmuje się tym po prostu interpreter php, który sam zajmuje się konstrukcją takiego prostego typu. Owszem - odchodzę nieco od tematu i oczywiście akurat ten typ konstrukcji nie jest jakimś szczególnie obiektowym zjawiskiem.

Cytat(Crozin @ 24.09.2008, 21:49:47 ) *
Może chodzi Ci o
  1. <?php
  2. $obj = new abcdef();
  3. ?>
Ale tutaj nazwanie $obj zmienna jest trochę dziwne. No i konstruktor nie zawsze jest używany. Jedynie wtedy, gdy jest on zaimplementowany w klasie/klasie rodzicu.

Mógłbyś wyjaśnić mi cóż w tym dziwnego widzisz?

Cytat(Crozin @ 24.09.2008, 21:49:47 ) *
Nie, nie jest to dość specyficzny przypadek.

To jest chyba dość subiektywny punkt widzenia. Dobrze, że możemy mieć inny - różnica mam nadzieję będzie budująca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Osobiście jak sięgam pamięcią nie kojarzę, żeby zdarzyło mi się tworzyć klasy bez konstruktorów. Co więcej - dokładnie tak byłem uczony. Oczywiście moje poglądy mogą wypływać z typu oprogramowania i używanych przeze mnie języków. Nie ukrywam, że jeśli chodzi o php to w tej chwili jest to dla mnie dość interesująca, niemniej wciąż tylko zabawa. Dużo większe doświadczenie mam z c++ i c#, pisywałem głównie różne sofciki bazodanowe, numeryczne i odrobinę sieciowych.

Mam nadzieję nauczyć się od Was czegoś ciekawego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Co do koniecznosci definiowania konstruktorow, szybkie statystyki z mojego projektu:

Kod
$ find . -name "*.php" | xargs grep -E "^class" | wc -l
     219
$ find . -name "*.php" | xargs grep -E "__construct" | wc -l
      86


Czyli (w przyblizeniu, bo zliczanie nei bylo dokladnie) mam konstruktor w mniej niz 50% klas, a w OOP nie jestem (nieskromnie) cienki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wrzasq
post
Post #27





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


@Crozin: chyba sie troche zagalopowales z tymi przykladami (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .

@mecenas: ja, tak jak poprzednicy uwazam, ze konstruktor nie jest wymogiem aby mowic o obiektowosci. jasne ze jest on bardzo przydatny i bardzo wazny, ale jego brak nie implikuje braku obiektowosci. mozna by sobie na przyklad wyobrazic sytuacje, gdy programista musi po prostu jawnie wywolywac jakas metode inicjujaca zamiast niejawnego wywolania konstruktora. umozliwia on oczywiscie wiele bardziej zlozonych konstrukcji i wieksza kontrole, ale same podstawy obiektowosci moim zdaniem sa realizowane i bez niego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . inna sprawa, ze owszem - PHP jest specyficzne. tutaj bardzo zadko konstruktor jest czyms niezbednym, zazwyczaj conajwyzej daje mozliwosc automatycznego ustawienia obiektu pod konkretna sytuacje, ale jego operacje nie sa niezbedne do tworzenia obiektu i jego funkcjonowania. owszem w C++, C#, czy na przyklad w Object Pascal/Delphi inaczej sie to postrzega, chociazby w Object Pascal'u gdzie tworzenie instancji klasy wymaga jawnego wywolania konstruktora, ale w PHP obiektowosc i tak jest uposledzona (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 24.08.2025 - 00:41