Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa konfiguracji - problem z wyborem
PotasK
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


Witam wszystkich jako nowy użytkownik tego forum smile.gif

Siedzę ostatnio nad własnym frameworkiem i zatrzymałem się przy plikach konfiguracyjnych, więc zwracam się z pytaniem do Was.

Jaki typ konfiguracji byłby według Was najlepszy i jak najszybszy: pliki XML, INI, czy też PHP (return array(...); itd.)
Właściwie zastanawiam się nad wyborem między XML, a PHP, z czego bardziej przychylny jestem drugiej opcji, jednak tutaj pojawia się kolejny problem,
mianowicie, nie wiem jak skonstruować klasę konfiguracji:
Czy wykorzystać ArrayObject i sprawić, żeby instancja klasy reprezentowała dany plik konfiguracyjny,
czy też "ładować wszystko do jednego worka", czyli zrobić taki jakby rejestr zawierający całą konfigurację?

A przy okazji rejestrów - zaimplementowałem już rejestr (taki ogólny, do przechowywania wszelkich danych globalnie) - czy warto podczepić pod niego konfigurację?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Kazdy robi to jak chce.
Xml czy Array czy Csv lub Ini to bez roznicy co uwazasz za bardziej wygodne stosujesz.

Ja konfiguracje bibliotek trzymam w array z php-a bo w sumie maja one tylko cos wspolnego z programista, a konfiguracje komponentow i plugin-ow mam w xml bo poprostu sa dosyc duze i zeby kazdy mogl sobie sam ustawic.

Cytat
A przy okazji rejestrów - zaimplementowałem już rejestr (taki ogólny, do przechowywania wszelkich danych globalnie) - czy warto podczepić pod niego konfigurację?

Rejestr,Singleton co tylko ze chcesz jak nie uzywam ani jedngo poprostu mam cache konfiguracji i jesli juz dana konfiguracja zostala juz gdzies zaladowana to nie laduje jej x2


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
PotasK
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


Dzięki za odpowiedź.
W sumie dobry pomysł z tym cachowaniem, chociaż wydajnościowo myślę że wyjdzie podobnie jak w przypadku rejestru, ale jeszcze to sprawdzę.
A co do typu konfiguracji podsunąłeś dobrą kwestię, więc zostanę przy array, a inne typy zostawię do modułów.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


1. Definiujesz sobie interfejs w oparciu o który Twój framework będzie mógł pobierać informacje.
2. Tworzysz osobną klasę dla każdego źródła konfiguracji (XML, YAML, PHP itd.).

Przede wszystkim na start powinieneś udostępnić sobie konfigurację w XML/PHP.

Ten post edytował Crozin 25.04.2012, 18:45:12
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
W sumie dobry pomysł z tym cachowaniem, chociaż wydajnościowo myślę że wyjdzie podobnie jak w przypadku rejestru

Tak ale np taka konfiguracje xml/ini/csv trzeba przeprasowac wiec robisz cache z przeparsowana konfiguracja do array-a z php

A to co napisal @Crozin to uwazalem za oczywiste wiec nie wspomnialem aplikacja powinna pozwalac na rozne typy konfigruacji


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
PotasK
post
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


No wiadomo że oczywiste biggrin.gif Mnie chodziło tylko o to, który typ wykorzystać najlepiej jako przewodni smile.gif
Go to the top of the page
+Quote Post
Crozin
post
Post #7





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

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


XML - ze względu na wszechobecne wsparcie tego formatu, podpowiadanie/sprawdzanie składni w edytorze oraz podpowiadanie konkretnej struktury dokumentu (schema/dtd).
Go to the top of the page
+Quote Post
PotasK
post
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


To jeszcze pozostaje pytanie, czy klasę konfiguracji zrobić jako rozszerzenie ArrayObject, czy też wywoływać przy użyciu getterów i setterów?

Co do ArrayObject, chyba każdy wie jak to wygląda, ale z getterami i setterami chodzi mi o wywoływanie ustawień na zasadzie:

W pliku konfiguracyjnym:
  1. <?php
  2. return array(
  3. "mysql" => array(
  4. "host" => "localhost",
  5. "port" => 3306,
  6. "user" => "root",
  7. "password" => "",
  8. ),
  9. // itd.
  10. );
  11. ?>


I aby wywołać, np. nazwę użytkownika bazy:
  1. $oConfig = Config::load("database", Config_Array::instance());
  2.  
  3. print $oConfig->mysql->user;


Ten post edytował PotasK 25.04.2012, 20:48:13
Go to the top of the page
+Quote Post
Crozin
post
Post #9





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

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


Użycie getterów i setterów, które wygeneruje Ci IDE, udostępni:
1. Pełną kontrolę nad przekazywanymi/zwracanymi wartościami konfiguracyjnymi.
2. Banalnie prostą dokumentację.
3. W pełni statyczną (czytaj: lepszą) strukturę danych - będzie się to też wiązało z koniecznością utworzenia klasy dla każdego złożonego zasobu w konfiguracji.

Cytat
I aby wywołać, np. nazwę użytkownika bazy: [...]
Skoro piszesz o OOP to raczej:
  1. $configuration = new XmlConfiguration('/path/to/file');
  2.  
  3. echo $configuration->getDatabaseConfiguration()->getUsername();
Go to the top of the page
+Quote Post
by_ikar
post
Post #10





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


  1. <?php
  2.  
  3.  
  4. class Config
  5. {
  6. protected $data;
  7.  
  8. public function __construct($data = null)
  9. {
  10. $this->data = $data;
  11. }
  12.  
  13. public function __get($name)
  14. {
  15. $this->$name = new Config();
  16.  
  17. if(isset($this->data[$name]))
  18. {
  19. $this->$name = new Config($this->data[$name]);
  20. }
  21.  
  22. return $this->$name;
  23. }
  24.  
  25. public function isEmpty()
  26. {
  27. return empty($this->data);
  28. }
  29.  
  30. public function get()
  31. {
  32. return $this->data;
  33. }
  34.  
  35. public function set($data)
  36. {
  37. $this->data = $data;
  38. }
  39. }
  40.  
  41. $cfg = new Config(array(
  42. 'mysql' => array(
  43. 'host' => 'localhost',
  44. 'port' => 3306,
  45. 'user' => 'root',
  46. 'password' => null,
  47. )
  48. ));
  49.  
  50.  
  51. var_dump($cfg->mysql->get()); // return array('host' => 'localhost', 'port' => 3306, 'user' => 'root', 'password' => null)
  52.  
  53. var_dump($cfg->mysql->host->get()); // return 'localhost'
  54.  
  55. $cfg->mysql->password->set('secret');
  56. var_dump($cfg->mysql->password->get()); // return 'secret'
  57.  
  58. var_dump($cfg->mysql->notDefinded->get()); // return null


Taki tam przykład jak mógłbyś taką klasę konfiguracji w dość prosty sposób zrobić. Trochę wzorowana na działaniu klasy Zend_Config. Tam to trochę "lepiej" wygląda: http://framework.zend.com/manual/en/zend.c...troduction.html

Ten post edytował by_ikar 26.04.2012, 09:47:37
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: 20.08.2025 - 23:25