Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ocena podejścia do Dependency Injection, PDO + OOP + Dependency injection
marcinq123
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2013

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


Witam, uczę się OOP, zacząłem dla testów pisać klasę obsługująca bazę na podstawie PDO ( Trudno to nazwać DIC ). I proszę Was o ocenę czy w dobrą stronę to zmierza czy może podejście mam złe i później sobie skomplikuje życie ?

"Klasa DIC"

  1. class DataBaseConnection
  2. {
  3. protected $pdo;
  4. protected $mysqlHost = 'Host';
  5. protected $mysqlLogin = 'Login';
  6. protected $mysqlPassword = 'Haslo do bazy';
  7. protected $mysqlDatabase = 'Baza';
  8. public function __construct()
  9. {
  10.  
  11. try
  12. {
  13. $this->pdo = new PDO('mysql:dbname='.$this->mysqlDatabase.';host='.$this->mysqlHost.';', $this->mysqlLogin, $this->mysqlPassword);
  14. $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  15.  
  16. }
  17. catch(PDOException $exception)
  18. {
  19. echo $exception->getMessage();
  20. }
  21. }
  22.  
  23. public function prepare($sql)
  24. {
  25. return $this->pdo->prepare($sql);
  26. }
  27.  
  28. }


Pomijając kwestię iż trzymam dane do połączenia w klasie, czy ma mniej więcej tak to wyglądać ? Ciekawi mnie dlaczego musiałem zdefiniować funkcję prepare ... jak jej nie dopiszę to wywala mi później że nie istnieje ;x

Klasa User:

  1. class User
  2. {
  3. private $login;
  4. private $query;
  5. public function __construct($baza)
  6. {
  7.  
  8. $this->pdo = $baza;
  9.  
  10. }
  11.  
  12. public function selectUser($user)
  13. {
  14. $this->login = $user;
  15.  
  16. $this->query = $this->pdo->prepare('SELECT * FROM users WHERE login =:login');
  17. $this->query->bindParam(':login', $this->login, PDO::PARAM_STR);
  18. $this->query->execute();
  19.  
  20. if($this->query->rowCount() > 0)
  21. {
  22.  
  23. $row=$this->query->fetch();
  24. $this->nazwa = $row['data'];
  25. }else{echo ' dupa ';}
  26. }
  27.  
  28.  
  29.  
  30. public function getUserData()
  31. {
  32.  
  33. return $this->nazwa;
  34.  
  35. }
  36.  
  37. }


Kod napisany tylko żeby sprawdzić czy się uruchamia.

A wywołuje metody tak:

  1. $user = new User(new DataBaseConnection());
  2.  
  3. $user->selectUser('jakisUser');
  4. echo $user->getUserData();


Ogólnie działa, no chyba że skasuje metode prepare w klasie DataBaseConnection to wtedy już nie ;p Tylko pytanie jak już wcześniej napisałem czy dobrą drogą idę ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


@Crozin, +1 . Miałem to samo wymienić, ale nie chciało mi się tyle pisać (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 17:18