![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 265 Pomógł: 4 Dołączył: 30.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
napisałem sobie taką małą klasę, która odpowiada za pozycję użytkownika na mapie i chciałbym spytać czy to w ogóle ma coś wspólnego z OOP, co poprawić, jak ją lepiej napisać?
Dopiero zaczyna pisać klasy w php i chciałbym nabierać dobrych nawyków więc byłbym wdzięczny za uwagi (IMG:style_emoticons/default/smile.gif) Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
ważne, że zacząłeś (IMG:style_emoticons/default/winksmiley.jpg) - gdy będziesz w kodzie miał po kilka różnych klas wtedy lepiej to wypracujesz... gdy zobaczysz podobieństwa w końcu zaczniesz korzystać z dziedziczenia... przede wszystkim trzeba pisać...
ale najważniejsza uwaga to zamiast:
powinno być:
no i argumenty podajesz przy konstrukcji klasy... niekture jakoś mogą być wcześniej ustawione jeśli miałbyś podawać czasem mniejszą liczbę argumentów np. __construct($x, $y, $id = 0)... no i w klasie możesz sprawdzać, czy zostały zadeklarowane odpowiednie zmienne - jeśli nie to rzucić jakimiś wyjątkami i takie tam... a i przy metodach, gdzie nic nie zwracasz konkretnego a jest możliwe, ze coś jeszcze z klasa będziesz robił można by dać return $this; ... co pozwoli czasem na konstrukcję $klasa->ustaw_cos()->zmien_imie('staszek')->ile_lat()..... [tzn przy zmianie imienia można było zwrucić np stare imię lub czy się powiodło - jeśli się powiodło to this a jeśli nie to null bądź false i inne tam - taki sobie łańcuszek na szybko napisałem ;p] Ten post edytował zegarek84 25.05.2010, 16:07:26 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
Wiesz do czego służy funkcja mysql_affected_rows()? Bynajmniej nie do sprawdzania ile danych zostało pobranych w select'ie.
Spróbuj zaimplementować wnętrza metod które podałem i sam oceń czy mój czy twój kod jest bardziej elastyczny (IMG:style_emoticons/default/smile.gif) Edit: poprawienie metod W konstuktorze x i y są dodatkowo null'ami żebyś mógł stworzyć nowy obiekt nie znając wartości na początku a potem mogł przestawić postać
Ten post edytował zend 26.05.2010, 11:46:19 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
kolega wyżej dał kolejny dobry myk [bardziej mam na myśli definiowanie metod i funkcji - może być tak jak tutaj argumentów konstruktora], ale zamiast:
W konstuktorze x i y są dodatkowo null'ami żebyś mógł stworzyć nowy obiekt nie znając wartości na początku a potem mogł przestawić postać
powinno się pisać: i nie mam na myśli przy tej klasie konkretnie... a dlaczego tak?? by móc potem pisać:
oczywiście równie dobrze można to zdefiniować jako: public function __construct($id, $x = domyslna_wartosc , $y = domyslna_wartosc) {} no i jeszcze jeśli byś chciał przez argument przekazywać tylko określoną klasę bądź jej potomki bądź mającą określony interfejs to można jeszcze coś takiego: Kod funkcja_lub_metoda_czy_konstruktor (Nazwa_Klasy_Interfejsu_badz_Rodzica $zmienna_reprezentujaca_obiekt /* można jej dać jeszcze domyślną wartość np jako null czyli = null */) {...}
Ten post edytował zegarek84 27.05.2010, 14:06:42 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 365 Pomógł: 8 Dołączył: 16.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
1. Pisz settery i gettery jeśli są konieczne.
2. Pisz komentarze w stylu PhpDoc:
3. Korzystaj z dodatkowej warstwy abstracji do komunikacji z bazą danych. 4. Jeśli w if...else używasz klamer to używaj ich i do else i do if:
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Popatrz krytycznie na kod odpytujący bazę danych.
1. Zapytania powinny być wykonywane przez jakiś osobny obiekt, np. http://www.php.net/manual/en/book.pdo.php 2. Brak obsługi błędów (zapytania się czasami wywalają) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 17:44 |