Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obiekty
Forum PHP.pl > Forum > PHP
tsharek
Witam wszystkich,

Chcę zrobić sobie uniwersalną klasę do obsługi bazy danych, a z tego powodu że jestem leniwy (tongue.gif) to chciałbym skorzystać z wcześniej napisanych przeze mnie klas do obsług postgresa i mysqla. I tutaj zaczyna się problem. Jak zrobić tak że w konstruktorze inicjuje inną bazę danych (np. postgres) i wszystkie metody z tej klasy przechodzą na tą główną klasę. Do tej pory korzystałem z statycznej metody (chyba tak to się zwie).
Czyli coś takiego:
  1. <?php
  2.   class db
  3.   {
  4.     protected function __construct() {} 
  5.  
  6.     public function dbnew($jakabaza)
  7.     {
  8.       if($jakabaza='pgsql')  return new pgsql_driver;
  9.       if($jakabaza='mysql')  return new mysql_driver;
  10.     }
  11.   }
  12. ?>

czyli aby stworzyć nowy obiekt robiłem coś takiego:
  1. <?php
  2.   $db=db::dbnew('pgsql');
  3. ?>


a to mi się jakoś tak nieładne wydaje. Wolałbym to jednak umieścić w konstruktorze, ale nie wiem za bardzo jak:P

Z góry dzięki za pomoc
dr_bonzo
Konstruktor 'db' nie moze zwrocic ci obiektu jakiejs innej klasy (nie bedacej w jego hiearchi), moze zwrocic tylko obiekt swojej klasy lub klas pochodnych.
M4chu
Wystarczy zastosowac wzorzec Factory.
tsharek
Cytat(M4chu @ 2005-09-14 14:19:05)
Wystarczy zastosowac wzorzec Factory.

Proste rozwiązania są najlepsze:) a nie wpadłem na to, bo uparłem sie że to musi być klasa:P ale chyba z tego skorzystanie będzie najlepszym rozwiązaniem:)

dzięki wielkie:)
M4chu
Nic nie stoi na przeszkodzie, zeby to tez byla klasa, ale z metoda statyczna smile.gif A klasa dlatego, ze moze sie jeszcze kilka metod przydac, np: parseDsn, ktora zamieni adres na zmienne $host, $user itp (np dzieki parse_url) Wtedy mozesz sie 'fajniej' laczyc smile.gif
  1. <?php
  2. $conn = Database::getConnection('mysql://user:password@host:port');
  3. ?>

Zreszta co tu sie bede rozpisywal, skoro wszystko to znajdziesz w Creole winksmiley.jpg
tsharek
Cytat(M4chu @ 2005-09-14 14:44:47)
Nic nie stoi na przeszkodzie, zeby to tez byla klasa, ale z metoda statyczna smile.gif A klasa dlatego, ze moze sie jeszcze kilka metod przydac, np: parseDsn, ktora zamieni adres na zmienne $host, $user itp (np dzieki parse_url) Wtedy mozesz sie 'fajniej' laczyc smile.gif
  1. <?php
  2. $conn = Database::getConnection('mysql://user:password@host:port');
  3. ?>

Zreszta co tu sie bede rozpisywal, skoro wszystko to znajdziesz w Creole winksmiley.jpg

właśnie wcześniej łączyłem się przez metodę statyczną (patrz 1 post). Baaa nawet miałem takie 2 metody (jedna zwracała nowy objekt, druga to singleton), ale właśnie nurtowało mnie czy stworzenie takiej nowej klasy da się zrobić w konstruktorze. A co do parse_url to oczywiście z tego korzystam:D:D:D
wozek_t
Rozumiem ze cel jest szczytny, ale po co wywarzać otwarte drzwi?
skorzystaj z ADODB.
tsharek
Cytat(wozek_t @ 2005-09-15 07:48:04)
Rozumiem ze cel jest szczytny, ale po co wywarzać otwarte drzwi?
skorzystaj z ADODB.

ADODB jakoś nigdy mi się nie podobało - za duża kobyłka jak dla mnie. Jak mam takie możliwości i umiejętności wolę popisać własne klasy bo mogę łato i szybko dodać do nich to co mi jest potrzebne smile.gif
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.