Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Centralizacja konfiguracji a klasy
Lewiatan
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 6
Dołączył: 1.02.2010
Skąd: Łódź

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


Witam

Chciałbym się zorientować jakie są możliwości jeśli chodzi o centralizację konfiguracji i wykorzystywanie jej zmiennych bezpośrednio w klasach. Otóż stworzyłem sobie pliczek, załóżmy config.php i zrobiłem tam tablicę, np:
  1. $config['db']['host'] = 'localhost';
  2. $config['db']['user'] = 'user';
  3. $config['db']['pswd'] = 'hasieł';
  4. $config['db']['baza'] = 'baza';


dalej mam klasę dostępową do bazy danych, taki tam banał, ale problem jest z przekazaniem zmiennych bezpośrednio do klasy np. w taki sposób:
  1.  
  2. require_once('./config.php');
  3.  
  4. class baza
  5. {
  6. private $host; //host
  7. private $user; // użytkownik
  8. private $pswd; // hasło
  9. private $baza; //baza danych
  10. private $db;
  11. private $affected_rows = 0;
  12.  
  13. public function __construct()
  14. {
  15. $this->host = $config['db']['host'];
  16. $this->user = $config['db']['user'];
  17. $this->pswd = $config['db']['pswd'];
  18. $this->baza = $config['db']['baza'];
  19. }
  20. }


Do tej pory zmienne konfiguracyjne ustawiałem w każdej klasie z osobna.

Pomyślałem, że można zrobić klasę, tam zdefiniować tablice z danymi konfiguracyjnymi i utworzyć metody dostępowe żeby zwracały tablicę, coby dostęp wyglądał np. tak:
  1. class baza
  2. {
  3. private config = array();
  4. private $db;
  5. private $affected_rows = 0;
  6.  
  7. public function __construct()
  8. {
  9. $conf = new Config();
  10. $this->config = $conf->getDbConfig();
  11. }
  12. }


Pytanie jest następujące: jakie są dobre możliwości rozwiazania tego problemu? Bo czytałem, że define raczej powinno się unikać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawy OOP - obiekt nie powinien się w jakiś automagiczny sposób samoistnie konfigurować. Konfiguracja musi być przekazana mu z zewnątrz, czyli:
  1. public function __construct($host, $user, $password, $database) {
  2. ...
  3. }
Jeżeli zmiennych konfiguracyjnych jest za dużo (konstruktor z 10-oma argumentami to zła rzecz) możesz utworzyć jakiś obiekt reprezentujący konfigurację dla danego obiektu, czyli:
  1. public function __construct(DatabaseConfiguration $config) {
  2. ...
  3. }
Go to the top of the page
+Quote Post
Lewiatan
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 6
Dołączył: 1.02.2010
Skąd: Łódź

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


Cytat(Crozin @ 21.03.2011, 18:19:48 ) *
Podstawy OOP - obiekt nie powinien się w jakiś automagiczny sposób samoistnie konfigurować. Konfiguracja musi być przekazana mu z zewnątrz, czyli:
  1. public function __construct($host, $user, $password, $database) {
  2. ...
  3. }
Jeżeli zmiennych konfiguracyjnych jest za dużo (konstruktor z 10-oma argumentami to zła rzecz) możesz utworzyć jakiś obiekt reprezentujący konfigurację dla danego obiektu, czyli:
  1. public function __construct(DatabaseConfiguration $config) {
  2. ...
  3. }

No rozumiem. Tak myślałem, że jest możliwość przekazania tego przez konstruktor (w zasadzie to pierwsze przyszło mi do głowy) ale znowu średnio mi się jakoś widzi za każdym wywołaniem przekazywać zmienne bądź obiekt w konstruktorze. Liczyłem na to że jest jakiś bardziej "elegancki" sposób wink.gif
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


To jest właśnie elegancki sposób. Zacznij pisać testy automatyczne lub używać kodu wielokrotnie, to się o tym sam przekonasz smile.gif.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
Lewiatan
post
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 6
Dołączył: 1.02.2010
Skąd: Łódź

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


OK, a ten sposób który napisałem na początku, żeby obiekt był tworzony przez konstruktor a nie przesyłany do konstruktora też się nada? tongue.gif
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wtedy równie dobrze możesz na stałe wpisać sobie konfigurację w kod klasy, bo przecież nie będzie możliwości żadnego sensownego zmieniania tych ustawień.
Cytat
[...] ale znowu średnio mi się jakoś widzi za każdym wywołaniem przekazywać zmienne bądź obiekt w konstruktorze [...]
A ile to masz obiektów odpowiedzialnych za połączenie z bazą danych na stronie? Zapewne jeden, może dwa.
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: 19.08.2025 - 18:35