Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP]Walidacja, Klasa walidujaca,
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, zaczynam z OOP i napisałem prostą klasę walidującą dla małych formularzy, napiszcie co można poprawić, miałem ją zaopatrzyć w MVC i prezentować błędy widokiem ale to już na kiedy indziej.

  1. //wlasciwa klasa w moim nastepnym poscie w tym temacie ;P


Ten post edytował MateuszS 21.04.2010, 17:23:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





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

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


Cytat
Jakis praktyczny przyklad masz komponent News i pokolei klase News_Model,News_View i News_Controller
To teraz tak:
1) Czym jest w tym przykładzie News, czym jest News Model, czym News View oraz czym jest News Controller? Skoro mają dziedziczyć po tym samym (News) sugeruje to, że wszystkie te klasy są Newsem, jednakże ciężko jest mi wyobrazić sobie jakąkolwiek zależność (na tej płaszczyźnie) pomiędzy takimi klasami.

Cytat
Jako ze uzywamy MVC to jesli model komponentu News bedzie dziedziczyl po klasie do obslugi np mysql'a to bedzie ok czyli:
  1. class News_Model extends MySqlDb { }
Dlaczego co widzę pytanie mające najmniejszy związek z OOP/projektowaniem aplikacji zaraz wplata się wątek MVC? Biedne MVC jest już chyba tym dla PHP co AJAX dla JS.

Nie wprowadzaj w ogóle pojęcia tego wzorca na tę chwilę bo jest to zbyteczne. Jedynie mieszasz autorowi wprowadzając kolejne "dziwne nazwy" których nie rumie (Ty zresztą chyba też o czym za chwilę - bez urazy (IMG:style_emoticons/default/tongue.gif) ).

Dlaczego NewsModel (czyli jak rozumiem coś co ma pełnić rolę Modelu dla zasobu: News) ma dziedziczyć po klasie obsługi bazy danych? W jaki sposób News rozszerza dostęp do bazy danych? Czy News jest dostępem do bazy danych? Tak absurdalne pytania tworzy Twój pomysł. Ten obiekt (NewsModel) co najwyżej może wykorzystywać obiekt MysqlDB. Może nie oznacza, że musi, bo Newsy mogą być pobierane np. z pliku XML czy z innego portalu - wtedy nie ma potrzeby by NewsModel w ogóle miał możliwość zrobienia czegokolwiek w bazie danych.

Cytat
A dlaczego jest ok bo klasa News_Model nie wprowadza zadnych nowych funkcjonalnosci ktore zmienia przeznaczenie klasy tylko operuje na bazie tak jak to robi klasa MySqlDb z tym ze rozszerza je o funkcje pobierania news'ow,usuwania ich,edytowania i dodawania operujac zawsze na bazie.
Wybacz, ale: Google "dziedziczenie programowanie obiektowe", "kompozycja programowanie obiektowe". Nie rozpoznajesz relacji jest (is a) oraz ma (has a).

Cytat
Instancje klasy uzywasz wtedy gdy potrzebujesz uzyc jakas klase w srodku innej jednak te w klasy nie maja ze soba nic wspolnego
No tutaj to już pojechałeś... Jeżeli dwa obiekty nie mają ze sobą nic wspólnego to jakim cudem mogą współpracować?

Cytat
To znaczy nie mozesz zrobic takie potwora z czarnobyla:
  1. class Controller extends View { }
Tak swoją drogą... tutaj piszesz o Czarnobylach, a wcześniej sam takiego zrobiłeś (NewsModel dziedziczy po MySQLDB)

Cytat
Nie wiem czy jasno napisalem moze przyklady jakies takie nie takie ale na szybko podalem przyklad.
  1. class Auto { }
  2.  
  3. class Fiat extends Auto { } // jako tako ma sens bo kazdy pojazd robi to samo tylko jeden moze miec wiecej ficzerow niz drugi
  4.  
  5. class Bmw extends Auto { } // ok
  6.  
  7. class Motor extends Auto { } // nie bardzo pasuje
Przykład z dupy... znaczy się: kompletnie niepoprawny. Jakim cudem BMW może być rozszerzeniem samochodu? Przecież to jest marka samochodu (BMW czyli marka mogłoby być właściwością obiektu).

Przykład korygujący:
  1. abstract class Pojazd {} // Może się poruszać, przyśpieszać, hamować
  2. abstract class PojazdKołowy extends Pojazd {} // To co Pojazd + Ma koła, może skręcać
  3. class Rower extends PojazdKołowy {} // to co PojazdKołowy + Ma łańcuch
  4. class Smaochód extends PojazdKołowy {} // to co PojazdKołowy + Ma silnik, zbiornik paliwa, nadpisuje "przyśpieszać" (by spalało paliwo), może tankować


Kod
IMHO nie rozszyfrowałem skrótu acl.
ACL = Access Control List
Kod
Mądrze piszesz i trochę mi rozjaśniłeś ale czy jest sens żeby taka przykładowa klasa News_Model dziedziczyła po MYSQLDB ?
Jak już napisałem - nie ma. Co więcej jest to błąd.
btw: Nie ulegaj złudzeniu, że jak ktoś się posługuje zwrotami, których nie znasz, to automatycznie oznacza, że się zna. (IMG:style_emoticons/default/smile.gif)
Kod
Przecież można przekazać zwyczajnie obiekt, po co każda lepsza klasa potem ma dziedziczyć z Mysqla. Jeżeli ta klasa będzie musiała dziedziczyć z innej przy okazji?
Dokładnie tak to powinno być rozwiązane.
Kod
PHP nie obsługuje z tego co wiem dziedziczenia z kilku klas.
Tak jest. ...i całe szczęście.

Kod
Jaka jest praktyczna różnica pomiędzy dziedziczeniem a wywołaniem obiektu klasy w klasie, przykład:
Dziedziczenie oznacza właśnie relację typu: jest. Jeżeli Jabłko dziedziczy po Owoc to możemy powiedzieć, że Jabłko jest Owocem - przy czym Jabłko to jakiś bardziej wyspecjalizowany byt niż Owoc. To drugie to tzw. kompozycja i jest to relacja typu: ma. Samochód ma silnik (ma również Lusterko, Fotel, Kierownicę), ale o samochodzie nie powiesz, że jest to silnik.

Kiedy używamy kompozycji? W momencie, kiedy dany obiekt, potrzebuje wykonywać jakieś operacje na innym.

Przykład:
  1. class Silnik {
  2. public $moc;
  3. public $spalanie;
  4. }
  5.  
  6. class Samochód {
  7. public $silnik;
  8. public $paliwo;
  9.  
  10. public function możeJechać($km) {
  11. return $this->paliwo > $this->slinik->spalanie * $km;
  12. }
  13.  
  14. public function jedź($km) {
  15. $this->paliwo -= $this->slinik->spalanie * $km;
  16. }
  17. }
  18.  
  19.  
  20. $silnik = new Silnik();
  21. $silnik->moc = 75;
  22. $silnik->spalanie = 0.5;
  23.  
  24. $samochód = new Samochód();
  25. $samochód->silnik = $silnik;
  26. $samochód->paliwo = 50;
  27.  
  28. while ($samochód->możeJechać(50)) {
  29. echo 'Jadę 50 km';
  30. $samochód->jedź(50);
  31. }
Ten przykład łamie wiele paradygmatów obiektówki (np. hermetyzację danych), ale powinno dać Ci to jako taki obraz na współpracę obiektów.

Ten post edytował Crozin 23.04.2010, 01:04:44
Go to the top of the page
+Quote Post

Posty w temacie
- MateuszS   [PHP][OOP]Walidacja   21.04.2010, 15:58:09
- - Crozin   Dlaczego ten kod się do niczego nie nadaje? 1) P...   21.04.2010, 16:55:47
- - MateuszS   To tak: 1. Miałem tragiczny błąd w metodzie, nie p...   21.04.2010, 17:21:55
- - Spawnm   destruct masakryczny , echo w modelu ? Dodatkowo l...   21.04.2010, 17:29:51
- - Wicepsik   Walidacja NIPu nie polega tylko na policzeniu jego...   21.04.2010, 17:42:50
- - MateuszS   Spawnm, tak wiem, to nie jest problem zamienić na ...   21.04.2010, 18:24:03
- - Crozin   Cytat3. Mógłbyś wytłumaczyć o co chodzi z Cytatwa...   21.04.2010, 19:41:32
- - MateuszS   Niestety jest to dla mnie czarna magia co napisałe...   21.04.2010, 19:55:49
- - Crozin   CytatPoza tym wywala błędy z tym namespaceWidoczni...   21.04.2010, 20:17:58
- - MateuszS   CytatWidocznie masz PHP w wersji poniżej 5.3 - ale...   21.04.2010, 21:03:41
- - Crozin   CytatNo ja przecież napisałem skrypt który ma za z...   21.04.2010, 22:06:30
- - MateuszS   CytatRównież uważam, że branie się za FW w momenci...   22.04.2010, 11:51:06
- - Crozin   CytatNo nie przesadzajmy, podstawy pewne mamTego n...   22.04.2010, 13:30:24
- - zzeus   @Crozin mógłbyś rzucić kilka linków do artykułów k...   22.04.2010, 13:34:31
- - marcio   Cytat@Crozin mógłbyś rzucić kilka linków do artyku...   22.04.2010, 13:50:12
- - MateuszS   Crozin, to że nie użyłem w mojej klasie np. dziedz...   22.04.2010, 13:57:49
- - Crozin   CytatCrozin, to że nie użyłem w mojej klasie np. d...   22.04.2010, 16:50:25
- - MateuszS   No a jak wy się OOP uczyliście? Też mieliście taki...   22.04.2010, 19:31:53
- - marcio   Cytat(MateuszS @ 22.04.2010, 20:31:53...   22.04.2010, 20:50:39
- - MateuszS   He czyli głupie pytania kluczem do sukcesu To kol...   22.04.2010, 20:58:21
- - marcio   Taka ze dziedziczysz po klasie ktora rozszerza kla...   22.04.2010, 21:27:49
- - MateuszS   IMHO nie rozszyfrowałem skrótu acl. Mądrze piszesz...   22.04.2010, 21:52:07
- - Crozin   CytatJakis praktyczny przyklad masz komponent News...   23.04.2010, 01:02:49
- - marcio   Jak pisalem przyklady wymyslilem w momencie. Cytat...   23.04.2010, 09:29:00
- - MateuszS   Czyli jednak moja intuicja jeszcze ma się całkiem ...   23.04.2010, 13:12:58
- - Crozin   CytatKiedyś też tak myślałem ale doszedłem wtedy d...   23.04.2010, 13:57:22
- - MateuszS   Crozin, dało by się jakoś uprościć twoje klasy? Ta...   23.04.2010, 14:24:57
- - Crozin   Nie chcę już zaśmiecać wątku kolejnym długim listi...   23.04.2010, 16:42:30
- - marcio   CytatCóż... proszę rozwiń dlaczego uznałeś, że był...   23.04.2010, 17:09:22
- - MateuszS   Wielkie dzięki Crozin! To teraz pytania: 1. ...   23.04.2010, 17:31:27
- - smentek   Tablice mają to do siebie, że przechowują dane róż...   23.04.2010, 22:12:42
- - Crozin   CytatTwój walidator zwraca błędy (do tego poprzez ...   24.04.2010, 15:08:03
|- - smentek   Cytat(Crozin @ 24.04.2010, 16:08:03 )...   28.04.2010, 19:00:58
- - marcio   CytatTablice w swojej znanej z "normalnych...   24.04.2010, 17:57:00
|- - smentek   CytatTablice w swojej znanej z "normalnych...   28.04.2010, 18:43:24
- - MateuszS   Hmm... to ja może od nowa spróbuję napisać klasę, ...   24.04.2010, 22:54:01
- - Crozin   Skoro "filozofii", któregoś kawałka nie ...   25.04.2010, 00:34:00
- - MateuszS   Ok to tak, nie bardzo rozumiem jeszcze czemu używa...   25.04.2010, 08:03:55
- - Crozin   To zacznijmy od najłatwiejszego - przestrzeni nazw...   25.04.2010, 10:40:21
- - MateuszS   Albo jestem za głupi albo... właściwie to tylko to...   25.04.2010, 15:01:29
- - Crozin   JAk już napisałem... w PHP interfejsy nie grają is...   25.04.2010, 16:01:50
- - MateuszS   Ok, czyli nie wolno pojedynczemu obiektowi w tym p...   26.04.2010, 12:36:27
- - Crozin   Nie ma chyba jednoznacznej granicy. Po prostu... o...   26.04.2010, 14:34:22
- - MateuszS   Dzięki Crozin za cierpliwość (wiem że jej zasób ju...   27.04.2010, 19:11:54
- - Crozin   Cóż... możesz zawsze wrzucić kod - jeżeli już niko...   27.04.2010, 22:41:47
- - marcio   Ogolnie w jezykach takich jak Ruby/Python standart...   28.04.2010, 01:53:08
- - MateuszS   Jak najlepiej rozwiązać problem dodawania nowych o...   28.04.2010, 18:58:46
- - MateuszS   No dobra smentek, ale może wypowiedz się na temat,...   28.04.2010, 19:23:36
- - Crozin   CytatTablice w większości języków programowania mo...   28.04.2010, 20:12:27
- - MateuszS   No ok, ale Ty w swojej klasie zamieściłeś coś w st...   28.04.2010, 21:17:33
- - Crozin   To co ja zamieszczałem jako parametry to były właś...   28.04.2010, 21:20:40
- - smentek   Cytat(MateuszS @ 28.04.2010, 20:23:36...   4.05.2010, 15:19:32
- - Cysiaczek   Myślę, że iloczyn logiczny stanu walidatorów pozwa...   7.05.2010, 06:44:32


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: 13.10.2025 - 11:50