Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php][oop] dlacze tak sie pisze....
terabit
post 14.08.2008, 12:45:46
Post #1





Grupa: Zarejestrowani
Postów: 170
Pomógł: 4
Dołączył: 11.08.2006

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


Witam,

ucze się oop...
i nasunęło mi się takie pytanie:

Dlaczego powinno się (chyba) pisać tak:

  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $model -> text = $text;
  4. $model -> nazwa = $nazwa;
  5. $model -> dodaj_strone();
  6. ?>


czy nie wystarczy po prostu

  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $modle = dodaj_strone($text, $nazwa);
  4. ?>


czy może chodzi o to że powinno się wszystko rozbijać na jak najmniejsze części (medy, classy) i każda mała część jest tylko za jedną rzecz odpowiedzialna?


--------------------
Go to the top of the page
+Quote Post
Shili
post 14.08.2008, 12:50:38
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Możesz i w jeden i w drugi sposób. Zależy ściśle od tego co chcesz zrobić.

Jaka jest zaleta drugiego przykładu - w pierwszym nie możesz kontrolować co zostaje wpisane do właściwości klasy przy jej wpisaniu, może się tam znaleźć największa bzdura, a przekazując dane do metody spokojnie możesz je już na wstępie walidować.

Ten post edytował Shili 14.08.2008, 12:51:31
Go to the top of the page
+Quote Post
wookieb
post 14.08.2008, 12:52:05
Post #3





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




Jak już to tak
Kod
$model = new Nazwa_Modelu;
$model->dodaj_strone($text, $nazwa);

Ale to wszystko zalezy co to za klasa i co ona ma robic. Jezeli liczba parametrow jest cholernie dluga wiec warto robic 1 metoda.


--------------------
Go to the top of the page
+Quote Post
terabit
post 14.08.2008, 13:10:04
Post #4





Grupa: Zarejestrowani
Postów: 170
Pomógł: 4
Dołączył: 11.08.2006

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


Cytat(Shili @ 14.08.2008, 13:50:38 ) *
Możesz i w jeden i w drugi sposób. Zależy ściśle od tego co chcesz zrobić.

Jaka jest zaleta drugiego przykładu - w pierwszym nie możesz kontrolować co zostaje wpisane do właściwości klasy przy jej wpisaniu, może się tam znaleźć największa bzdura, a przekazując dane do metody spokojnie możesz je już na wstępie walidować.


a tak:
  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $model -> text($text);
  4. $model -> nazwa($nazwa);
  5. $model -> dodaj();
  6. ?>


i np teraz w metodzie text i nazwa moge sobie sprawdzac czy wszystko ok winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Shili
post 14.08.2008, 13:26:00
Post #5





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Możesz i jak najbardziej jest to jedna z używanych metod. Oczywiście w tym momencie warto właściwości klasy opisać jako chronione lub prywatne, żeby umożliwić ustawianie tylko poprzez odpowiednie metody.
Go to the top of the page
+Quote Post
Moli
post 14.08.2008, 13:35:51
Post #6





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Możesz w metodzie __set daj sprawdzanie poprawności smile.gif Wszystkie możliwości są prawidłowe, a to jak Ci będzie wygodniej pisać to musisz już sam sprawić smile.gif Ja np. wole dac
Kod
$class->set($nazwa,$wartosc);

niż rozbijać na oddzielne metody. A __set nie lubię jakoś smile.gif We własnej metodzie set mogę sobie tablice itp. ustawiać, więc mam większą kontrolę i większe możliwości smile.gif
Go to the top of the page
+Quote Post
wlamywacz
post 14.08.2008, 15:06:50
Post #7





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

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


Pisze sie tak aby uniknąć wywołania metody z parametrami bo czasem sa cholernie długie, po drugie masz w jeden obiekcie wywołanie funkcji z tego samego obiektu to po co do każdej przekazywać usera w parametrze skoro można to zrobić tak:
  1. <?php
  2. $user = new users;
  3. $users->setUser(system::getLogined());
  4. //a nie tak
  5. $user->getUser(system::getLogined(), $model->getJakisModel($idjakies));
  6. $user->getInfo(system::getLogined(), 'type');
  7. //Bo takie długie molochy wychodzą
  8. ?>


Ten post edytował wlamywacz 14.08.2008, 15:07:52
Go to the top of the page
+Quote Post
Crozin
post 14.08.2008, 19:36:26
Post #8





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

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


Przepraszam bardzo za mały OT, ale nie poraz pierwszy widze takie coś:
co oznacza wyraz Logined? Chodzi o Logged In?
Go to the top of the page
+Quote Post
wlamywacz
post 14.08.2008, 20:06:19
Post #9





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

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


Ważne ze wiadomo o co chodzi smile.gif
Go to the top of the page
+Quote Post
Crozin
post 14.08.2008, 20:52:05
Post #10





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

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


Nie chciałbym tu nikomu ubliżać, ale naukę programowania polecałbym od nauki podstaw języka angielskiego.

I nie ważne, że wiadomo o co chodzi - nie czepiam się literówki czy jakiegoś tam małego błędu gramatycznego, ale tworzenie nowego języka jest trochę dziwne.
Go to the top of the page
+Quote Post
.radex
post 16.08.2008, 20:56:30
Post #11





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(terabit @ 14.08.2008, 14:10:04 ) *
  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $model -> text($text);
  4. $model -> nazwa($nazwa);
  5. $model -> dodaj();
  6. ?>


Jak najbardziej można, ale moim zdaniem jest to troszeczkę bez sensu. Rozbijanie wszystkiego na siłę na oddzielne funkcje składowe (metody) jest co najmniej dziwne - ani to szybkie (więcej kodu), ani funkcjonalne, użyteczne.

Cytat
Nie chciałbym tu nikomu ubliżać, ale naukę programowania polecałbym od nauki podstaw języka angielskiego.

I nie ważne, że wiadomo o co chodzi - nie czepiam się literówki czy jakiegoś tam małego błędu gramatycznego, ale tworzenie nowego języka jest trochę dziwne.


Daj spokój winksmiley.jpg


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Sedziwoj
post 18.08.2008, 15:16:34
Post #12





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

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


Cytat(.radex @ 16.08.2008, 21:56:30 ) *
Jak najbardziej można, ale moim zdaniem jest to troszeczkę bez sensu. Rozbijanie wszystkiego na siłę na oddzielne funkcje składowe (metody) jest co najmniej dziwne - ani to szybkie (więcej kodu), ani funkcjonalne, użyteczne.


Rozbicie ma sens, jeśli można wywołać jedną metodę, a drugą już nie, jeśli obie są wymagane na raz, to lepiej jest aby przyjmowały parę argumentów (ale też nie za dużo, jak więcej to znaczy, że inaczej trzeba to rozwiązać, np. przez obiekt z danymi). Więc to czy będzie dwie metody wywołane, czy jedna, zależy od tego jak dokładnie działają.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
.radex
post 18.08.2008, 16:41:27
Post #13





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(Sedziwoj @ 18.08.2008, 16:16:34 ) *
Rozbicie ma sens, jeśli można wywołać jedną metodę, a drugą już nie, jeśli obie są wymagane na raz, to lepiej jest aby przyjmowały parę argumentów (ale też nie za dużo, jak więcej to znaczy, że inaczej trzeba to rozwiązać, np. przez obiekt z danymi). Więc to czy będzie dwie metody wywołane, czy jedna, zależy od tego jak dokładnie działają.


Hmm.. może Ciebie źle zrozumiałem, ale: pakowanie wszystkiego do jednej metody na siłę jest bez sensu, wtedy dużo lepiej dać to do kilku osobnych metod. To jest prawda, i jak rozumiem o tym właśnie mówisz. Natomiast przesyłanie argumentów przez osobne metody, jak tu:

  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $model -> text($text);
  4. $model -> nazwa($nazwa);
  5. $model -> dodaj();
  6. ?>


to IMO kompletny nonsens. Zgodzisz się smile.gif ?

Obrazowo: jak chcesz zrobić pranie, to wkładasz brudną odzież do pralki i wsypujesz do niej jakiegoś persila, czy czegośtam, czy może dzwonisz do jednego specjalisty, żeby wrzucił pranie, do drugiego żeby wsypał proszek, a na końcu dopiero włączasz pralkę :] ? Takie moje zdanie tongue.gif

Ten post edytował .radex 18.08.2008, 16:43:29


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
wlamywacz
post 18.08.2008, 20:34:21
Post #14





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

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


Nie jest! Masz klasę np. comments a w niej funkcje: add i get. Kazda potrzebuje do działania id newsa dla którego ma operować wystarczy:
  1. <?php
  2. $comments->setIdnews($this->param3);
  3. ?>

niz za kazdym razem:
  1. <?php
  2. $comments->get($this->param3);
  3. $comments->add($this->param3, $content);
  4. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post 18.08.2008, 20:37:06
Post #15





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




Dlaczego nonsens? A jeśli chce zmienić tylko jedno pole?


--------------------
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
.radex
post 18.08.2008, 22:59:38
Post #16





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(Cysiaczek @ 18.08.2008, 21:37:06 ) *
Dlaczego nonsens? A jeśli chce zmienić tylko jedno pole?

Cytat(wlamywacz @ 18.08.2008, 21:34:21 ) *
Nie jest! Masz klasę np. comments a w niej funkcje: add i get. Kazda potrzebuje do działania id newsa dla którego ma operować wystarczy:
  1. <?php
  2. $comments->setIdnews($this->param3);
  3. ?>

niz za kazdym razem:
  1. <?php
  2. $comments->get($this->param3);
  3. $comments->add($this->param3, $content);
  4. ?>


Też prawda. winksmiley.jpg Nie pomyślałem o tym w taki sposób tongue.gif


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Sedziwoj
post 19.08.2008, 11:19:15
Post #17





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

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


Cytat(.radex @ 18.08.2008, 17:41:27 ) *
Obrazowo: jak chcesz zrobić pranie, to wkładasz brudną odzież do pralki i wsypujesz do niej jakiegoś persila, czy czegośtam, czy może dzwonisz do jednego specjalisty, żeby wrzucił pranie, do drugiego żeby wsypał proszek, a na końcu dopiero włączasz pralkę :] ? Takie moje zdanie tongue.gif


A czy jak idziesz do swojego pokoju otwierasz wszystkie drzwi aby do niego wejść, czy tylko te co prowadzą do niego? Bo chyba nie ma sensu otwierać wszystkich jak chcesz tylko przez jedne przejść. To jest przykład kiedy mamy wiele metod, ale każda jest niezależna (w użyciu) od drugiej.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Crozin
post 19.08.2008, 12:05:42
Post #18





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

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


  1. <?php
  2. $model = new Nazwa_Modelu;
  3. $model -> text($text);
  4. $model -> nazwa($nazwa);
  5. $model -> dodaj();
  6. ?>
Taki zapis jest wygodny gdy:
1) Możemy dodać wiele tekstów czy wiele nazw
2) Kod jest trochę rozrzucony
  1. <?php
  2. $model = new Nazwa_Modelu;
  3. //jakis kod, ktory nam cos tam pobiera
  4. $model->text($text);
  5. //znowu jakis kod, ktory robic cos zupelnie innego
  6. //i tu znowu cos tam
  7. $model->nazwa($nazwa);
  8. //cala reszta
  9. //by na koncu dac
  10. $model->dodaj();
  11. ?>
Jeżeli ma to być w "zwartym szyku" to można metodzie dodaj() dodać dwa parametry.
Go to the top of the page
+Quote Post
Cysiaczek
post 19.08.2008, 12:49:51
Post #19





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




W praktyce, najczęściej łączy się oba sposoby. Np. w Propelu oprócz setterów i getterów jest też metoda fromArray().


--------------------
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
Sedziwoj
post 19.08.2008, 12:50:09
Post #20





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

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


Cytat(Crozin @ 19.08.2008, 13:05:42 ) *
Jeżeli ma to być w "zwartym szyku" to można metodzie dodaj() dodać dwa parametry.


No właśnie jest mowa o tym że nie zawsze chcesz podawać dwa parametry i wtedy to wychodzi dziwnie
  1. <?php
  2. $model->dodaj( $var1, null );
  3. ?>

Chodzi o to że np. jak edytujesz jakiś wpisz (AR) to przecież nie podajesz wszystkiego na raz, tylko pojedynczo, bo jak byś chciał zmienić status to nie ma sensu abyś musiał pisać resztę pól, tylko to potrzebne.
Co innego jak to ma być np. połączenie z Webservice, wtedy musisz podać adres, port, login, hasło, bo to jest konieczne do zainicjowania połączenia i zawsze muszę być wszystkie, i dlatego podaje się je jako argumenty jednej metody, czy też w konstruktorze.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 18.04.2024 - 03:58