Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dane w staticu i wywołanie klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
thoriam
witam mam mały problem. Otóż pewne pliki konfiguracyjne nie zmieniają się w czasie jak np. dane dotyczące bazy danych. Klasa która posiada dany plik konfiguracyjny często jest wykorzystywana w innych klasach. Więc non-stop trzeba wykorzystywać dziedziczenie. Chciałem zrobić to trochę inaczej ale nie wiem czy coś takiego jest możliwe. Zamiast pisać rzucę kod może lepiej wyjaśni o co chodzi.
  1. class db
  2. {
  3. static $database;
  4. static function config($config){
  5. self::$database = $config;
  6. }
  7.  
  8. public function __construct(){
  9. $this->db = new PDO(self::$database['driver'].':host='.self::$database['server'].';dbname='.self::$database['dbname'].'',self:: $database['username'], self::$database['password']);
  10. }
  11. }
  12.  


wywołanie w takim razie bazy danych wygląda tak
  1. db::config($database);
  2.  
  3. class test{
  4.  
  5. public function test(){
  6. $db = new db;
  7. }
  8.  
  9. }

i już w klasie test możemy korzystać z pdo w taki sposób
  1. class test{
  2.  
  3. public function test(){
  4. $db = new db;
  5. $db->db->prepare('jakieś zapytanie');
  6. }

nie jest to zbyt eleganckie. Kurczę aż się prosi żeby można było zrobić coś takiego. niestety konstruktor nie ma zamiaru zwracać żadnej wartości
  1. class db
  2. {
  3. static $database;
  4. static function config($config){
  5. self::$database = $config;
  6. }
  7.  
  8. public function __construct(){
  9. return new PDO(self::$database['driver'].':host='.self::$database['server'].';dbname='.self::$database['dbname'].'',self:: $database['username'], self::$database['password']);
  10. }
  11. }


wtedy wywołanie mogłoby wyglądać tak
  1. class test{
  2.  
  3. public function test(){
  4. $db = new db;
  5. $db->prepare('jakieś zapytanie');
  6. }


moglibyście pomóc mi jak za pomocą statycznej metody przekazać dane, a potem tylko dzięki wywołaniu klasy od razu ze wszystkiego korzystać. Nie wiem czy dosyć jasno się wyraziłem. Ciężko trochę to wytłumaczyć wink.gif
michaJlS
Poczytaj o wzorcach projektowych. Rzuć okiem na singleton i registry. http://www.oodesign.com/singleton-pattern.html
thoriam
a co waszym zdaniem lepsze jest użycie singletonu czy registry questionmark.gif
Dipter
Oba te wzroce są jak dla mnie w tym przypadku bez sensu, natomiast Dependency Injection jest idealnym wyjściem.
thoriam
czyli jeszcze jedna możliwość wink.gif. Ale która jest najlepsza? Jakie mają wady , zalety??
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.