![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czy ten kod jest dobry? Uczę się obiektowości i zastanawiam się czy dobrze to napisałem. Baze danych zrobiłem jedną klasą, użytkownika drugą, to chyba jest dobrze. Tylko nie wiem czy dobrze to rozwiązałem, że do klasy użytkownik przekazuję obiekt bazy danych. Proszę, napiszcie mi co myślicie o tym kodzie, czy mogę pisać dalej, czy może to jest w ogóle bez sensu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Nie chodzi mi o idealny sposób na zapis tego kodu(każdy z Was pisze troszeczkę inaczej), tylko o to czy mogę to rozwiązać tak jak to zrobiłem, czy mój sposób nie kłóci się z zasadami programowania obektowego. pozdrawiam! Ten post edytował erix 12.06.2009, 14:13:14
Powód edycji: [erix] przeniosłem
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
zły dział...
klasa bazaDanych jest bez sensu , na siłe dałeś mysqla w klase i koniec ... napisz singletona czy coś... bo obecna klasa to zwykły mysql tylko wolniejszy i ma zmienione nazwy. uzytkownik zbyt wiele wymagasz danych do constructa , klasa zbyt wymusza dane i wiele nie daje ... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Kod $osoba = new uzytkownik( $mySql, null, 1, 'login123', 'mojehaslo', 'marek' ); A nie lepiej np.: Kod $osoba->setDabase($handle);
$osoba->login = 'login'; $osoba->password = 'haslo'; $osoba->save(); |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
uzylem tego singletona, w tej chwili to czy mamy podane $this->id jest równe temu czy użytkownik jest już zapisany w bazie. Myślicie że taka klasa jest dobra?
Ten post edytował marekc12 25.06.2009, 13:24:40 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1) To nie jest poprawna implementacja singletona. Nadal istnieje możliwość stworzenia wielu obiektów - poprzez klonowanie.
2) Taka drobna rada. Dla Uzytkownik::oInstance ustaw domyślnie null, nie false. Widzę, że użyłeś tego śmiesznego sposobu zapisywania nazw zmiennych (gdzie pierwszy znak określa typ zmiennej - o: object) (właśnie, jak to się nazywało? :]) więc wypada być konsekwentnym i nie przypisywać do niej false (typ: boolean) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
1) Konstruktor służy (w teorii) wyłącznie do przypisywania obiektowi pewnych wartości więc ten mysql_connect tam jest bez sensu, powinien się raczej znaleźć w metodzie connect(). W przypadku rozszerzania klasy miałbyś problem, poza tym ograniczasz sobie/innym pole manewru.
2) Pola w klasie mysql powinny być protected nie private. W przypadku rozszerzania klasy nie byłyby dostępne. 3) te przekazywanie uchwytu do mysqla dla użytkownika jest bez sensu, lepiej skorzystać z singletona bądź wzorca factory z jakiejś globalnej klasy 4) klasy nie powinny wyświetlać żadnych błędów, ponieważ narzucasz je z góry mimo, że mogą być niepotrzebne. Zamiast tego wyrzucaj wyjątek, który ktoś może obsłużyć lub nie - ma wybór. Ten post edytował em1X 25.06.2009, 15:51:42 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 5 Dołączył: 12.04.2007 Skąd: 1=1 Ostrzeżenie: (0%) ![]() ![]() |
Kod //singleton private static $oInstance = false; private function __construct() {} public static function getInstance() { if( self::$oInstance == false ) self::$oInstance = new Singleton(); return self::$oInstance; } //koniec: singleton 1) prywatny konstruktor?? 2) self::$oInstance = new Singleton(); (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Kod if( $wynik = czytajBaze( \"SELECT * FROM uzytkownicy WHERE id=$id\" ) ) { $this->id = $id; $this->login -> $wynik[1][2]; $this->haslo -> $wynik[1][3]; $this->imie -> $wynik[1][4]; $this->nazwisko -> $wynik[1][5]; return $wynik; } 3) gdzie masz definicję metody czytajBaze i dlaczego tablica dwuwymiarowa?? chyba ciut za bardzo kombinujesz, zapoznaj się z dokumentacją PDO, SQLite a najlepiej MySQLi |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
ja bym dał
ponieważ można kopiować prędko do każdej klasy bez potrzeby pisania zmian (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
a akurat singletona to skopiowałem z innej stronki, chodziło mi bardziej o reszte kodu (i czy dobrze, że użyłem w tej klasie singletona? bo nie trzeba mi wiecej niz 1 obiektów tej klasy), czytaj baze to jest coś takiego(na szybko to pisalem moga byc jakies bledy, nie wazne):
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
te nazwy to z kosmosu chyba bierzesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ten post edytował em1X 26.06.2009, 09:20:39 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
ok, dzięki za rady (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Co do nazewnictwa to wiem, że może jest trochę śmieszne, ale myślę, że lepiej jest się odnaleźć w kodzie, jeżli używa wymyślonych przez samego siebie nazw.
Poprawiłem(jeszcze mialem wrzucic wyjątki o których pisał em1X) klasę do bazy i obsługi użytkowników, zapewne nie jest idealna, ale wrzucam ją tu, może akurat komuś się przyda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) Pozdrawiam!
Ten post edytował marekc12 27.06.2009, 21:45:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 04:06 |