Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Implementacja klas, Czy potrzebna?
kezard
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 19.01.2010

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


Witam!

Załóżmy że mamy przykladowa funkcje doSomething() :

  1. function doSomething($obj)
  2. {
  3. $obj->imie = 'Adam';
  4. $obj->nazw = 'Kowalski';
  5.  
  6. return $obj;
  7. }
  8.  
  9. doSomething($test);
  10. echo $test->imie.' '.$test->nazw;


Ten kod oczywiscie zadziała, jednak pytanie brzmi czy warto implementowac klase dla obiektow wykorzystanych w przykladzie. Czy jest sens, nawet jesli zwracaja wiekszoa ilosc danych niz tylko imie i nazwisko? Czy warto tworzyc dodatkowy kod aby byc OOP czy nie marnowac czasu"skoro dziala" ? Jakie sa roznice techniczne?

Dla porownania :
  1. class Test
  2. {
  3. public $imie;
  4. public $nazw;
  5. }
  6.  
  7. function doSomething($obj)
  8. {
  9. $obj->imie = 'Adam';
  10. $obj->nazw = 'Kowalski';
  11.  
  12. return $obj;
  13. }
  14.  
  15. $test = new Test;
  16. doSomething($test);
  17. echo $test->imie.' '.$test->nazw
  18. ?>


Dodam że wykorzystuje to przy przekazywaniu danych do widokow (MVC). Czy warto tworzyc implementacje?

pozdrawiam.

Ten post edytował kezard 20.09.2010, 08:29:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #3





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

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


Twoja klasa Test to bardziej coś na kształt struktur znanych chociażby z C, niż faktyczna klasa. W pewnych przypadkach takie coś mogłoby mieć zastosowanie, ale tutaj raczej nie.

Swoją drogą im szybciej wejdzie Ci w nawyk korzystanie z getterów/setterów tym lepiej.
Go to the top of the page
+Quote Post
kezard
post
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 19.01.2010

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


Cytat
Swoją drogą im szybciej wejdzie Ci w nawyk korzystanie z getterów/setterów tym lepiej.


Dlaczego? Uwazam ze to marnowanie czasu na pisanie funkcji get i set tylko po to zeby przepisywac wartosci do zmiennych. Pozatym niepotrzebnie sie kod powieksza. Dlaczego nie upraszczac sobie bezposrednim dostepem do zmiennych?

Ten post edytował kezard 20.09.2010, 09:56:18
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(kezard @ 20.09.2010, 10:53:22 ) *
Swoją drogą im szybciej wejdzie Ci w nawyk korzystanie z getterów/setterów tym lepiej.


Dlaczego? Uwazam ze to marnowanie czasu na pisanie funkcji get i set tylko po to zeby przepisywac wartosci do zmiennych. Pozatym niepotrzebnie sie kod powieksza. Dlaczego nie upraszczac sobie bezposrednim dostepem do zmiennych?

Bo to sie mija z logika OOP?!?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
kezard
post
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 19.01.2010

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


Cytat(marcio @ 20.09.2010, 10:54:46 ) *
Bo to sie mija z logika OOP?!?


Czyli mam rozumiec ze jedynym arguementem jest "bo tak" ? Jak ktos tak wymyslil to tak to trzeba stosowac aaevil.gif ? Skoro ustawiam zmienne w klasie jako publiczne to po kij jeszcze bawic sie w set i get? Prosze o jakis argument smile.gif
Go to the top of the page
+Quote Post
NuLL
post
Post #7





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Hermatyzacja ? Polimorfizm ? Dziedziczenie ?

BTW - Twoj kod nie ma nic wspolnego z programowaniem obiektowym bo zamiast klasy mozna rowniez dobrze zastosowac tablice.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(NuLL @ 20.09.2010, 11:06:53 ) *
Hermatyzacja ? Polimorfizm ? Dziedziczenie ?

BTW - Twoj kod nie ma nic wspolnego z programowaniem obiektowym bo zamiast klasy mozna rowniez dobrze zastosowac tablice.

@NuLL myslalem ze @kezard sam do tego dojdzie ;] mylilem sie ;p

W php mamy malo "struktur" danych jako tako wiec albo robisz z klasy kontener ale nie w taki sposob tylko jakis bardziej wyrafinowany albo operujesz na array snitch.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
NuLL
post
Post #9





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


I dobrze ze PHP jest malo struktur bo one sa przeznaczone dla jezykow nieobiektowych tongue.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
kezard
post
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 19.01.2010

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


Cytat(marcio @ 20.09.2010, 11:11:20 ) *
@NuLL myslalem ze @kezard sam do tego dojdzie ;] mylilem sie ;p

W php mamy malo "struktur" danych jako tako wiec albo robisz z klasy kontener ale nie w taki sposob tylko jakis bardziej wyrafinowany albo operujesz na array snitch.gif



Widze ze sie nie zrozumilesmy, mialem na mysli ten konkretny przypadek klasy Test ktory podalem.

Cytat
BTW - Twoj kod nie ma nic wspolnego z programowaniem obiektowym bo zamiast klasy mozna rowniez dobrze zastosowac tablice.


W tej chwili tak to u mnie dziala na tablicach dlatego szukam bardziej obiektowego rozwiazania. Przykladowo model zwraca mi wyniki w postaci tablicy, kontroler ja obrabia i wysyla ja do widoku. Chcialem zastosowac jakas implemntacje tej struktury (przyklad klasa Test) ale odradziliscie. W tej chwili wyglada to tak ze mam w kodzie takie "kwiatki" :

  1. ....
  2. $finalList[$j]['arr'][$counter]['warehouse_out']
  3. $finalList[$j]['arr'][$counter]['warehouse_in_name']
  4. $finalList[$j]['arr'][$counter]['warehouse_out_name']
  5. $finalList[$j]['arr'][$counter]['estate_name']
  6. $finalList[$j]['arr'][$counter]['estate_id']
  7. $finalList[$j]['arr'][$counter]['ratios'][$r]['product_name']
  8. $finalList[$j]['arr'][$counter]['ratios'][$r]['lot']
  9. $finalList[$j]['arr'][$counter]['ratios'][$r]['value']
  10. $finalList[$j]['arr'][$counter]['ratios'][$r]['enoguh']


Co bardzo mi sie nie podoba a niemam pomyslu jak zamienic ten "twor" na bardziej przyjazny. Zamiana tego :

Cytat
$finalList[$j]['arr'][$counter]['warehouse_out']


Na to:
Cytat
$finalList[$j]->arr[$counter]->warehouse_out


Nie jest chyba rozwiazaniem ktorego szukam...
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #11





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




Po co chcesz to zmieniać? Jeśli nie zyskasz na tym nic, to nie ruszaj póki działa. Jeśli jednak przewidujesz jakiś rozwój, który potem może spowodować rozrost takiej tablicy to wtedy tak, warto coś z tym zrobić.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Crozin
post
Post #12





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

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


Cytat
Dlaczego? Uwazam ze to marnowanie czasu na pisanie funkcji get i set tylko po to zeby przepisywac wartosci do zmiennych. Pozatym niepotrzebnie sie kod powieksza. Dlaczego nie upraszczac sobie bezposrednim dostepem do zmiennych?
Dzięki temu zyskujesz większą kontrolę nad dostępem do danych zawartych w obiekcie. Masz dodatkowy "punkt dostępu". Nawet jeżeli w tej chwili jest to tylko przypisanie/zwrócenie pola, w przyszłości może dość potrzeba rozbudowy tego (np. dodania jakieś walidacji danych). Co prawda w przypadku PHP takie gettery/settery to dodatkowe obciążenie, ale w praktyce jest ono zerowe, a elastyczność/przyszłościowość kodu na tym zyskuje.

Cytat
I dobrze ze PHP jest malo struktur bo one sa przeznaczone dla jezykow nieobiektowych
PHP to nie jest język obiektowy - nawet udawanie obiektowego słabo mu wychodzi. smile.gif

Cytat
W tej chwili wyglada to tak ze mam w kodzie takie "kwiatki" :
Wygląda mi na to, że używasz pętli for, zamiast foreach, która by prawdopodobnie uprościła zapis. Na początek możesz pokombinować w tę stronę.
Go to the top of the page
+Quote Post
smentek
post
Post #13





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

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


Cytat
Dzięki temu zyskujesz większą kontrolę nad dostępem do danych zawartych w obiekcie. Masz dodatkowy "punkt dostępu". Nawet jeżeli w tej chwili jest to tylko przypisanie/zwrócenie pola, w przyszłości może dość potrzeba rozbudowy tego (np. dodania jakieś walidacji danych


Ale farmazony... Gettery i settery pisane same dla siebie są złe. Juz to przerabialismy a wy dalej swoje... ;(


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Zyx
post
Post #14





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Farmazony? A ja myślałem, że to się "hermetyzacja" nazywa. Ponadto po co odkopujesz stare tematy?

Ten post edytował Zyx 10.12.2010, 20:16:09


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
mike
post
Post #15





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

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


Cytat(Zyx @ 10.12.2010, 20:15:42 ) *
Farmazony? A ja myślałem, że to się "hermetyzacja" nazywa. Ponadto po co odkopujesz stare tematy?
Tyle tylko, że dołożenie do każdego pola automatycznie gettera to nie jest hermetyzacja. Hermetyzacja to ukrycie kodu a wystawianie kodu przez gettera to żadna hermetyzacja.
Go to the top of the page
+Quote Post
Zyx
post
Post #16





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Hermetyzacja to ukrycie wewnętrznej struktury klasy za interfejsem złożonym z metod, które mają kontrolować zmianę stanu każdego obiektu. Ponadto gdzie ja napisałem, by automatycznie dawać do wszystkiego? Dajesz tam, gdzie to jest potrzebne, implementujesz to tak, jak jest potrzebne, a getter/setter nawet nie musi mieć mapowania na pojedyncze pole. A że zazwyczaj ma? Nie zmienia to faktu, że to jest hermetyzacja, jako że ukryłeś wewnętrzną strukturę. Użytkownik nie musi wiedzieć, że to jest mapowane na pole prywatne/chronione.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 05:30