Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [OOP php] wywolywanie metod z innej klasy (?)
phpion
post 29.08.2006, 20:15:14
Post #1





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




Witam!
Chcialem sie was o co spytac, poradzic. Chcialbym napisac klase macierzysta do obslugi baz danych np. o nazwie DataBase smile.gif. Rownoczesnie napisac osobne klasy typu MySQL, PostgreSQL. I teraz aby w samym skrypcie mozna bylo stworzyc obiekt DataBase z jakims parametrem wskazujacym na typ uzytkowanej bazy i w dalszej czesci uzywc metod zdefiniowanych dla konkretnego typu bazy. Czyli chodzi mi o to, zeby na poczatku w konkstruktorze chociazby DataBase podac parametr MySQL, przez co wywolanie np. $db->polacz odwolalby sie pozniej do metody 'polacz' z klasy MySQL, natomiast jesli poda sie PosgreSQL to zeby uzyl metody z tej klasy.
Jak to ugryzc? Nie chodzi mi o napisanie klas tylko o samo jakby przekierowanie klas. Nie wiem jak to konkretnie okreslic. Tylko w tym problem, jak sie odwolac do klasy z metodami konkretnego typu bazy.

// EDIT: zmienilem temat ale nie wiem czy ten jest w miare sensowny...

Ten post edytował phpion.com 29.08.2006, 20:20:57
Go to the top of the page
+Quote Post
dr_bonzo
post 29.08.2006, 20:56:54
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%)
-----


Wzorzec Fabryka:

  1. <?php
  2. class DataBase
  3. {
  4. }
  5.  
  6. class MySQLDataBase extends DataBase
  7. {
  8. }
  9.  
  10. class PostgreSQLDataBase extends DataBase
  11. {
  12. }
  13.  
  14. class DBFactory
  15. {
  16. /**
  17. * @return DataBase
  18. */
  19. public function getMySQLConnection()
  20. {
  21.  return new MySQLDatabase(); /// lub mozesz skorzystac z singletona polaczenia
  22.  }
  23.  
  24. /**
  25. * @return DataBase
  26. */
  27. public function getPostgreSQLConnection()
  28. {
  29.  return new PostgreSQLDatabase(); /// lub mozesz skorzystac z singletona polaczenia
  30.  
  31.  }
  32. }
  33. ?>



----
edit:
lub tez tworzysz jedna metode:

public function getDBConnection( $db_type )

i na podstawie db_type zwracasz odpowienie obiekty.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
phpion
post 30.08.2006, 08:38:11
Post #3





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




O, dzieki, przynajmniej wiem juz o czym czytac! 'Metody fabryczne' <faja> smile.gif jeszcze raz dzieki!

EDIT:
A czy nei da sie tego zrobic bez tworzenia klasy DBFactory? Probowalem wrzucic tworzenie nwoego obiektu do konstruktora DataBase podajac jako parametr nazwe bazy i na podstawie tego poprzez switch-case tworzyc obiekt. Jednak takie cos nie dalo ZADNEGO efektu. Nawet wstawienie echo 'dupa' nie pomoglo. Po prostu czy da sie zrobic tak zeby w efekcie mozna bylo operowac w sposob:
  1. <?php
  2. $db = new DataBase('MySQL');
  3. $db->polacz(); // wywolanie metody z klasy MySQL
  4. ?>


Podbijam post do gory smile.gif

A jednak nie tongue.gif

Ten post edytował phpion.com 30.08.2006, 08:37:06
Go to the top of the page
+Quote Post
dr_bonzo
post 30.08.2006, 09:20:39
Post #4





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

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


NIE DA SIE! To sa podstawy OOP

"new Database()" ZAWSZE da ci obiekt klasy DataBase, niewazne co bys w srodku konstruktora robil.

A czemu nie mozesz tej fabryki utworzyc?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
phpion
post 30.08.2006, 09:34:12
Post #5





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




Wiem ze to podstawy OOP, dopiero sie ucze winksmiley.jpg Chcialem sie po prostu dowiedizec, czy jest jakis myk zeby to zrobic. A po co? No wlasciwie to tylko po to, zeby sie dowiedziec hehe. Dzieki za odpowiedz!
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 - 06:36