Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO - wątpliwości
Forum PHP.pl > Forum > PHP > Object-oriented programming
szymo
Witam.

W PHPie programuję dość długo i mam jako tako jakieś doświadczenie w strukturalnym pisaniu aplikacji. Postanowiłem się przerzucić na OOP i idzie mi całkiem nieźle... do czasu kiedy chcę skorzystać z bazy danych. Poczytałem o PDO, wiem jak z tego korzystać, ale jak to wygląda w praktyce? Załóżmy mam kilka klas, do wyświetlania newsów, ostatnich postów z forum itp. Każda pobiera coś z bazy danych i każda ma robić w sobie nowy egzemplarz PDO w tym celu? Trochę bez sensu mi się to wydaje. Chciałem skorzystać z singletona ale przeczytałem sporo opinii, że to zły pomysł. Jak Wy korzystacie korzystacie z bazy danych wewnątrz klasy?

Pozdrawiam!
Crozin
Każdemu z tworzonych obiektów przekazujesz istniejącą już instancję obiektu PDO. Z racji, że jest on wymagany do ich pracy powinien zostać przekazany już w konstruktorze.
szymo
Czyli chodzi Ci o coś takiego?
  1. try {
  2. $pdo = new PDO('mysql:host=' . MYSQL_LOCALE . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASS,
  3. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  4. }
  5. catch(PDOException $e) {
  6. echo 'BŁĄD POŁĄCZENIA Z BAZĄ DANYCH: ' . $e->getMessage();
  7. }
  8.  
  9. class News {
  10. protected $_db;
  11.  
  12. public function __Construct($db) {
  13. $this->_db=$db;
  14. }
  15. }
  16.  
  17. $newsy = new News($pdo);


Eh, sensowne i logiczne. Nie wiem czemu o tyn nie pomyślałem. Dzięki wink.gif
thoriam
możesz również wykorzystać dziedziczenie
Crozin
@thoriam: Nie, nie bardzo może tutaj wykorzystać dziedziczenie.
thoriam
pewnie masz na myśli coś takiego
  1. class News extends PDO{}

mi chodzi raczej o coś takiego
  1. class News extends Base{}

gdzie w w klasie Base można dać połączenie do PDO, błędy oraz ewentualnie inne klasy
Crozin
@thoriam: Nadal na nie wiele mu się to zda.
szymo
Przy takim dziedziczeniu przy robieniu nowego egzemplarza i tak będzie się robić nowy egzemplarz PDO czyli nowe połączenie z bazą. Na stronie jest zazwyczaj kilka klas wykorzystujących połączenie z bazą. Tworzenie tylu połączeń nie jest chyba zbyt wydajne...
thoriam
mówię jak można zrobić a nie mówię że to jest wydajne ;D
viking
Zerknij w dokumentację Zend_Db, Zend_Db_Table i zobaczysz jak to może być robione. Model DbTable dziedziczy Zend_Db_Table_Abstract i to przekazujesz (albo bezpośrednio wykorzystujesz) w innych klasach modelu (kontrolera).
Orzeszekk
Moze propel/doctrine?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.