Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> OOP i projektowanie
eVolution
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 20.03.2012

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


Witam,
Jako, że dopiero zaczynam naukę OOP, chciałbym się Was zapytań, czy jest to dobrze napisana klasa.

Klasa do obsługi bazy danych
  1. <?php
  2.  
  3. class DB
  4. {
  5. public function __construct()
  6. {
  7. try
  8. {
  9. $this->baza = new PDO('mysql: host=localhost; dbname=db', 'login','pass');
  10. }
  11. catch(PDOException $e)
  12. {
  13. throw new Exception($e->getMessage());
  14. }
  15. }
  16.  
  17. public function prepare($query)
  18. {
  19. return $result=$this->baza->prepare($query);
  20. }
  21. }
  22.  
  23. ?>


Klasa do obsługi użytkownika czyli dodanie, kasowanie
  1. <?php
  2. class User
  3. {
  4. protected $_db;
  5.  
  6. public function __construct(DB $db)
  7. {
  8. $this->_db = $db;
  9. }
  10.  
  11. public function add($login, $pass)
  12. {
  13. $result = $this->_db->prepare("INSERT INTO user VALUES(:login, :pass)");
  14. $result->bindParam(':login', $login, PDO::PARAM_STR);
  15. $result->bindParam('pass', $pass, PDO::PARAM_STR);
  16.  
  17. if(!$result->execute()){
  18. throw new Exception("Wystąpił błąd podczas dodawania usera.");
  19. }
  20. }
  21.  
  22. public function delete($id)
  23. {
  24. $result = $this->_db->prepare("DELETE FROM user WHERE id=:id");
  25. $result->bindParam(':id', $id, PDO::PARAM_INT);
  26.  
  27. if(!$result->execute()){
  28. throw new Exception("Wystąpił błąd podczas usuwania usera.");
  29. }
  30. }
  31. }

I oczywiście osobno UserManger czyli odpowiedzialna za pobranie danych typu login, logowanie etc...

Czy w tym kodzie jest wszystko ok? Kolejna sprawa, blok try - catch dawać w metodach w klasie, czy w miejscu gdzie dana metoda jest wywołana?

Ten post edytował eVolution 20.03.2012, 18:36:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Po co ci klasa DB, która nie wprowadza żadnej funkcjonalności poza bezsensownym wstawieniem na sztywno danych dla połączenia?
Go to the top of the page
+Quote Post
eVolution
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 20.03.2012

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


Dlatego założyłem ten temat, żeby mi ktoś wyjaśnił co i jak, i czy kod jest dobry. Ale już widzę, że nie. Czyli rozumiem, że najlepiej zawartość konstruktora z klasy DB dać do klasy User w konstruktor, i jest to lepszym rozwiązaniem?

Ten post edytował eVolution 20.03.2012, 18:49:45
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nikt Cię tutaj nie nauczy OOP bo to bardzo szeroka dziedzina
Od tego są odpowiednie książki helion -> wzorce projektowe
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat
Czyli rozumiem, że najlepiej zawartość konstruktora z klasy DB dać do klasy User w konstruktor, i jest to lepszym rozwiązaniem?

Nie. @wookieb'owi chodziło o to że twoja klasa DB nie robi nic innego prócz połączenia na sztywno, bo zarówno nie można przekazać żadnych ustawień, jak i ta klasa poza łączeniem się z bazą nic nie robi. I coś takiego większego sensu nie ma, bo równie dobrze gdzieś wcześniej możesz utworzyć połączenie w PDO i instancje PDO przekazać do klasy użytkownika. Pomijam już kwestię że praktycznie żadnych danych nie sprawdzasz..

Cytat
Czy w tym kodzie jest wszystko ok? Kolejna sprawa, blok try - catch dawać w metodach w klasie, czy w miejscu gdzie dana metoda jest wywołana?

A to już zależy od tego w jaki sposób chcesz obsłużyć wyjątek. Może masz tam jakiegoś handlera, wówczas nie musisz stawiać wszędzie try/catch, a jeżeli musisz wykonać inne działanie niż zatrzymanie aplikacji i komunikat o błędzie, to używaj try/catch..
Go to the top of the page
+Quote Post
eVolution
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 20.03.2012

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


Skrobnąłem na szybko coś takiego:
  1. <?php
  2. class Kalkulator
  3. {
  4. function dodaj($liczba, $liczba2)
  5. {
  6. $this->wynik = $liczba + $liczba2;
  7. return $this;
  8. }
  9.  
  10. function odejmij($liczba, $liczba2)
  11. {
  12. $this->wynik = $liczba - $liczba2;
  13. return $this;
  14. }
  15.  
  16. function mnozenie($liczba, $liczba2)
  17. {
  18. $this->wynik = $liczba * $liczba2;
  19. return $this;
  20. }
  21.  
  22. function wynik()
  23. {
  24. return $this->wynik;
  25. }
  26. }
  27.  
  28. $kalkulator = new Kalkulator;
  29. echo $kalkulator->odejmij(2,5)->wynik();
Czy tu jest wszystko ok? I mi nie chodzi o to, żeby ktoś mnie uczył OOP, tylko o to, że mam problem z tym, co np w danej klasie powinno się znaleźć. Np co powinno być w klasie odpowiedzialnej z 1 ucznia itp tak jak np w tej podanej powyżej to wiem co powinno być, ale jak już np chodzi o zrobienie bardziej sensownej klasy to już jest problem.

Poprawcie mnie jeśli się mylę:
Mam np obiekt samochód, czyli jego metody to skręcanie, hamowanie, przyśpieszenie, zwalnianie?
Kolejne mam obiekt użytkownik, jego metody to dodaj, usuń, aktualizuj, i UserManager czyli pokaz wybranego, pokaż wszystkich etc...? Wiem głupie pytania, ale żadna książka akurat tego nie opisuje (IMG:style_emoticons/default/wink.gif)

Ten post edytował eVolution 21.03.2012, 02:12:59
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Może ściągnij sobie http://framework.zend.com/manual/en/learni...tart.intro.html i zobacz jak to może być zrobione.
Go to the top of the page
+Quote Post
eVolution
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 20.03.2012

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


No właśnie ZF czy Kohana3 ? Oczywiście, bardziej z myślą o pracy jako progamista. Na ZF z tego co wiem jest większe zapotrzebowanie.
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Na ZF jest większe zapotrzebowanie, a co za tym idzie także konkurencja większa. Weź pod uwagę, że poznając dany framework od podstaw musisz poświęcić sporo czasu by nabrać doświadczenia i posługiwać się nim biegle.
Go to the top of the page
+Quote Post
eVolution
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 20.03.2012

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


Kohana3 wydaje się być prostym i lekkim frameworkiem, co przemawia na jego korzyść (IMG:style_emoticons/default/smile.gif) W KO2 miałem okazję pracować, jakieś pół roku.

Ten post edytował eVolution 21.03.2012, 13:24:38
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Ale to wcale nie znaczy że musisz tylko do tych się ograniczać. Oprócz większych Jak ZF, Symfony czy przytoczona Kohana jest też sporo całkiem ciekawych projektów. Jest Yii, jest pisany trochę na wzór Sinatry (Ruby) Laravel czy w końcu http://lithify.me/. A przytaczam tylko skupiające większą społeczność i aktywnie rozwijane. Wszystkie też są sporo szybsze niż ZF i Symfony.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #12





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Naucz sie programowania obiektowego w Javie i pozniej przenies sie do php jak bedziesz jeszcze chcial. obiektowosc php jest troche toporna i mozesz sobie wyrobic zle nawyki.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 22:37