![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 5.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hej... właśnie poznaję zagadnienie klas i programowania obiektowego.
Nie wszystko jest jeszcze dla mnie jasne, ale oto moje pierwsze dzieło... klasa generująca title i keywords w meta tagach. Skrytykujcie błędy i dajcie wskazówki, rady jak ją usprawnić. Kod class MetaInfo{ function title(){ $id = $_GET['id']; $wynik = mysql_query("SELECT nazwa, miasto, typ, woj FROM kwatery WHERE kwatery.id='$id' limit 1;")or die (mysql_error()); list ($nazwa,$miasto,$typ,$woj) = mysql_fetch_row($wynik); return $nazwa.', '.$typ.', noclegi '.$miasto.', woj. '.$woj; } function keywords(){ $id = $_GET['id']; $wynik = mysql_query("SELECT nazwa, miasto, typ, woj FROM kwatery WHERE kwatery.id='$id' limit 1;")or die (mysql_error()); list ($nazwa,$miasto,$typ,$woj) = mysql_fetch_row($wynik); return 'dobre kwatery, dobrekwatery, noclegi, '.$typ.', noclegi '.$miasto.', '.$miasto.', '.$woj; } } Nie wiem jak pozbyć się powtórzeń w obu funkcjach... można to zrobić przed funkcjami, tak by zmienne miały charakter globalny? Z góry, wielkie dzięki, pozdrawiam. Ten post edytował rapkar 5.08.2008, 21:29:59 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 29.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
obiektowośc zostaw na potem, na początek zauważ pewna prawidłowość, przesledźmy taki ciąg myślowy
Używam w zapytaniu $id, pobieram $id z _GET, _GET łyka wszystko z paska adresu ... zatem pozwalam każdemu dowolnie modyfikowac to zapytanie. Dlaczego az tak nie lubię swojej bazy danych ? Pójdę poczytać o walidacji danych wejściowych i funkcji htmlspecialchars (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) co potem ? aaa potem używaj obiektowości do woli, najlepiej tam gdzie się przyda a przyda się wszędzie tam gdzie operacje sa potarzalne, gdzie wydaje Ci sie, że lepiej by było gdyby obiekty gadały ze sobą wymieniając się krótkimi komunikatami i przekazywały sobie ujednolicone dane kilka pojęć - właściwości: to takie zmienne w obiekcie - metody: to takie funkcje w obiekcie - konstruktor: uruchomi sie zawsze gdy tworzysz obiekt danej klasy, dobry do inicjowania właściwości na podstawie parametrów (tak jak wstępna obróbka parametrów funkcji) - destruktor: dobre do szpanowania przed koleżankami, brzmi poważnie ale na tym etapie wiedzy na niewiele się zda - getter - metoda pozyskiwania danych z właściwości obiektu, policjant nie ma prawa (w warunkach pokojowych) zabrać Ci prawka, Ty musisz mu je pokazać. Policjant nie robi $kierowca->numer_prawka, policjant robi $kierowca->zapytaj_o_numer_prawka($policjant) a to po to, żeby obiekt $kierowca mógł w swojej metodzie zapytaj_o_numer_prawka($kto) sprawdzić, czy ma odznake i dopiero wtedy podać numer. W ten sposób po uprzednim ustawieniu większości właściwości (danych) jako prywatne sam decydujesz jak i w jakich warunkch obiekt będzie się dzielił danymi z otoczeniem. Wten sposób również możesz ustawić odpowiednio metody dostępowe tak, żeby podawały dane w różnych formatach. Obiekt może mieć właściwość $abonenci przechowujący tablicę a ty sobie napiszesz 4 metody dostepu get_ab_array / get_ab_html_list(ul/ol) / get_ab_str. Które odpowiednio zwracają: tablicę, kod html listy numerowanej lub nie / tablicę w postaci łańcucha z przecinkami, wszystko na podstawie jednej właściwości. itd itd - setter - metoda zapisu danych do obiektu, koniec z dopisywaniem zabezpieczeń w 5 plikach. Chcesz zapisać trasę i zamiast dawać komus mapę i ołówek, mówisz : nie, ty mów a ja notuję. Nie ustawiasz $mapa->trasa = ... kto wie co tam wyląduje, uruchamiasz metodę $mapa->zapisz_trasę($trasa), co pozwala Ci na sprawdzenie co tam jest zapisywane. Jeżeli dane pochodzą od użytkownika to walidujesz (htmlspecialchars, wyrażenia regularne) dodatkowo mapujesz znane typy danych (strval, intval) i masz pewność, że nie trzymasz złośliwych skryptów i że to co ma byc liczbą zawsze nią będzie Tips: - właściwości tablicowe inicjuj pustą tablicą, zagwarantujesz, że jedynym błędem będzie brak danych a nie zły typ danych - dokumentuj swoje klasy, nawet pusta metoda powinna miec opisane w kilku slowach komentarza co ma robic i jakie dane zwracac, 3 dni później będzie łatwiej wrócić do pracy - w czasie eksperymentów używaj var_dump do podglądu stanu obiektu - nie bój się klas pomocniczych, możesz stworzyć grupę funkcji wykonujących operacje z jednej "branży" i trzymać je w jednej klasie a do metod odwoływać się statycznie np. HTMLhelper::array_to_ul($array) gdzie array_to_ul jest metoda klasy HTMLhelper i generuje kod listy z tablicy, HTMLhelper::email_to_link($str) generowanie linka "mailto" itp itd w takim zastosowaniiu obiektowość jest traktowana po macszemu a klasa służy jedynie zwiekszeniu przejrzystości kodu i utrzymania porządku w funkcjach pomocniczych. Po 10tym użyciu będziesz już z marszu widział gdzie są metody helpera i pamiętał co zwracają bez szukania "co ta funkcja właściwie robiła" - nie dziw się, że obiektowe rozwiązania są często przegadane i mają sporo pozornie zbędnego kodu - ten kod to gwarancja jednolitości, przejrzystości i bezpieczeństwa skryptu - no i pamiętaj, że nie wszystko musi być obiektowe (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) dopóki nie piszesz kodu Open Source zakładającego współprace z wieloma programistami, lepiej, żeby Twój skrypt był proceduralny ale poprawny niż na siłę obiektowy bez zrozumienia |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:57 |