Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP php] wywolywanie metod z innej klasy (?)
Forum PHP.pl > Forum > Przedszkole
phpion
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...
dr_bonzo
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.
phpion
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
dr_bonzo
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?
phpion
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!
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.