Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> obiekty, obiekt w obiekcie:)
tsharek
post 14.09.2005, 12:56:56
Post #1





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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

Ten post edytował tsharek 14.09.2005, 12:59:55


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
dr_bonzo
post 14.09.2005, 13:17:50
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Konstruktor 'db' nie moze zwrocic ci obiektu jakiejs innej klasy (nie bedacej w jego hiearchi), moze zwrocic tylko obiekt swojej klasy lub klas pochodnych.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
M4chu
post 14.09.2005, 13:19:05
Post #3





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


Wystarczy zastosowac wzorzec Factory.
Go to the top of the page
+Quote Post
tsharek
post 14.09.2005, 13:29:45
Post #4





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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:)


--------------------
Go to the top of the page
+Quote Post
M4chu
post 14.09.2005, 13:44:47
Post #5





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


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
Go to the top of the page
+Quote Post
tsharek
post 14.09.2005, 21:08:57
Post #6





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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

Ten post edytował tsharek 14.09.2005, 21:09:26


--------------------
Go to the top of the page
+Quote Post
wozek_t
post 15.09.2005, 06:48:04
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 8.06.2003

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


Rozumiem ze cel jest szczytny, ale po co wywarzać otwarte drzwi?
skorzystaj z ADODB.
Go to the top of the page
+Quote Post
tsharek
post 15.09.2005, 08:23:44
Post #8





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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

Ten post edytował tsharek 15.09.2005, 08:24:13


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:28