Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dane w staticu i wywołanie klasy
thoriam
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.02.2012

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


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
Go to the top of the page
+Quote Post
michaJlS
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 9
Dołączył: 21.05.2004
Skąd: Glogau/Breslau

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


Poczytaj o wzorcach projektowych. Rzuć okiem na singleton i registry. http://www.oodesign.com/singleton-pattern.html
Go to the top of the page
+Quote Post
thoriam
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.02.2012

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


a co waszym zdaniem lepsze jest użycie singletonu czy registry questionmark.gif
Go to the top of the page
+Quote Post
Dipter
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


Oba te wzroce są jak dla mnie w tym przypadku bez sensu, natomiast Dependency Injection jest idealnym wyjściem.
Go to the top of the page
+Quote Post
thoriam
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.02.2012

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


czyli jeszcze jedna możliwość wink.gif. Ale która jest najlepsza? Jakie mają wady , zalety??
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 Aktualny czas: 21.08.2025 - 16:55