![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 161 Pomógł: 9 Dołączył: 14.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dopiero zacząłem przygodę z obiektowym PHP. Uczyłem się z książki 'Zaawansowane tworzenie stron www PHP5 Szybki start'.
Udało mi się wykombinować taki kod: http://www.wklej.com.pl/show.php?what=20080812201428 Ma to służyć jako miniCMS, to są klasy do zarządzania podstronami. Chciałbym się zapytać czy to jest wogóle obiektowo, bo mi się wydaje że to są zwykłe funkcje pogrupowane w klasy. Nie wiem czy rozumiem ideę obiektowego programowania. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ja mam parę uwag:
W konstruktorach masz stanowczo zbyt dużo. Form obejdzie się i bez klasy i action - innymi słowy w konstruktorze powinno być tylko i wyłącznie method, bo bez tego obiekt jest bezużyteczny. Z inputem podobnie. W konstruktorach masz moim zdaniem za dużo zbędnych danych, bez których obiekt poradzi sobie bez żadnego problemu. Konstruktor jest nie po to, żeby upychać wsjo jak leci. Klasę abstrakcyjną w takiej formie można sobie spokojnie darować. Aktualnie jest tak, że każdy element dziedziczy po niczym (się zrymowało, hehe). Nie wiem, mistrzem OOP nie jestem i raczej w najbliższej przyszłości nie będę, ale jakoś mi się to nie widzi. W klasie abstrakcyjnej (tudzież w interfejsie - zależy od kilku rzeczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) mógłbyś zadeklarować na przykład metodę abstrakcyjną toString() którą masz w każdym elemencie. Ale jest to metoda publiczna - innymi słowy jakoś bardziej widzę tutaj interfejs niż klasę abstrakcyjną na razie. Interfejs dlatego, że w aktualnym stanie te klasy nie mają nic wspólnego - jedynie metodę toString, która dodatkowo w każdej jest inaczej interpretowana. A to już domena interfejsu - są sobie klasy, mają jakieś metody o takich samych nazwach, ale inaczej się je implementuje. Dla przykładu: Masz kota i sweter z szorstkiej włóczki. Kot drapie i sweter drapie, prócz tego nie mają cech wspólnych - możesz dla nich obu zrobić interface z metodą drapie() (nie po angielsku, bo podejrzewam, że drapanie przez szorstki sweter nie będzie tak samo jak drapanie przez kota, poza tym to tylko przykład), ale nie ma sensu robić klasy abstrakcyjnej, w której będzie jedynie niezaimplementowana metoda. Przynajmniej moim zdaniem. No chyba, że ta wspólna metoda jest prywatna lub chroniona, ale to inna bajka (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował Shili 14.09.2008, 20:10:19 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 10:08 |