Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa Configurator, Narzedzie do obslugi plikow konfiguracyjnych
Prph
post
Post #1





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Witam,

Pisze framework do wlasnych potrzeb. Planuje napisac PROSTA i uzyteczna klase do ladowania konfiguracji.

Moze macie z tym doswiadczenie?
Moje rozwiazanie w szkicu jest nastepujace:

  1. <?php
  2.  
  3. class Configurator
  4. {
  5.  
  6. public function getAttribute()
  7. {
  8. $aConfig = array // Tablica asocjacyjna konfiguracji
  9.  (
  10.  'Actions' => array
  11. (
  12. 'Error404' => array
  13. (
  14. 'security' => false,
  15. 'nextModule' => 'Test'
  16. ),
  17.  
  18. 'Default' => array
  19. (
  20. 'security' => false,
  21. 'nextModule' => 'Default2'
  22. )
  23. )
  24.  );
  25.  
  26. if(func_num_args() == 0) // Dostep do konfugiracji uzyskuje sie przez
  27. return null;  // liste parametrow do funkcji.
  28.  // Kolejne parametry, to kolejne węzły konfiga
  29.  
  30. $aArgs = func_get_args();
  31.  
  32. $aCurrentConfig = $aConfig;
  33.  
  34. foreach($aArgs as $sKey => $sAttributeName) // przechodzac przez kolejne elementy, zmieniamy "obecny węzeł"
  35. {
  36. if(isset($aCurrentConfig[$sAttributeName]))
  37. $aCurrentConfig = $aCurrentConfig[$sAttributeName];
  38. else
  39. return null; // jeżeli nie znalaziono podanego węzła, zwracamy null
  40. }
  41.  
  42. return $aCurrentConfig; // niby to array, ale jezeli chcemy dokladnie
  43. // wartosc ostatniego wezla, zwrocona zostanie
  44. // nie tablica, ale inna zmienna.
  45. }
  46.  
  47. public function hasAttribute() {}
  48. public function setAttribute() {}
  49.  
  50. public function saveConfiguration() {}
  51. }
  52.  
  53. $oConfigurator = new Configurator();
  54.  
  55. echo $oConfigurator->getAttribute('Actions', 'Default', 'nextModule');
  56. // zwroci "Default2".
  57.  
  58. ?>


Bede wdzieczny za wskazowki, radu, etc. Pozdrawiam, Adrian.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ociu
post
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Najogólniej to zrobiłem to tak:
  1. <?php
  2. class ZConfig implements iConfig
  3. {
  4.  
  5. private $configuration;
  6.  
  7. public function __construct()
  8. {
  9.  
  10.  
  11.  
  12. }
  13.  
  14. public function setConfig( $config )
  15. {
  16.  
  17. $this->configuration = $config;
  18.  
  19. }
  20.  
  21. public function getConfig()
  22. {
  23.  
  24. return $this->configuration;
  25.  
  26. }
  27.  
  28. public function receive( $name )
  29. {
  30.  
  31. return $this->configuration->get( $name );
  32.  
  33. }
  34.  
  35. public function __get( $name )
  36. {
  37.  
  38. return self::receive( $name );
  39.  
  40. }
  41.  
  42. public function attach( $name, $value ) 
  43. {
  44.  
  45. if( get_class($this->configuration) == 'ZLazyConfiguration' || get_class($this->configuration) == 'ZPHPConfiguration' )
  46. {
  47.  
  48. $this->configuration->attach( $name, $value );
  49.  
  50. }
  51.  
  52. }
  53.  
  54. public function __set( $name, $value )
  55. {
  56.  
  57. self::attach( $name, $value );
  58.  
  59. }
  60.  
  61.  
  62. }
  63. ?>


Noi najprostrzy komponent:
  1. <?php
  2. class ZLazyConfiguration implements iConfigurationComponent {
  3.  
  4. private $map = array();
  5.  
  6. public function attach( $sIndex, $sValue ) 
  7. {
  8.  
  9. if( !self::exists( $sIndex ) )
  10. {
  11. $this->map[ $sIndex ] = $sValue;
  12.  
  13. return true;  
  14. } else {
  15.  
  16. return false;
  17.  
  18. }
  19.  
  20. }
  21.  
  22. public function get( $sIndex ) 
  23. {
  24.  
  25. if( self::exists( $sIndex ) ) 
  26. {
  27.  
  28. return $this->map[ $sIndex ];
  29.  
  30. } else
  31. {
  32.  
  33. return false;
  34.  
  35. }
  36.  
  37. }
  38.  
  39. private function exists( $sIndex )
  40. {
  41.  
  42. return isset( $this->map[ $sIndex ] );
  43.  
  44. }
  45. }
  46. ?>


Saluto, Wojtek
Go to the top of the page
+Quote Post

Posty w temacie
- Prph   Klasa Configurator   30.05.2006, 15:29:02
- - NuLL   http://ez.no/doc/components/view/1.0.1/(fi...figur...   30.05.2006, 15:37:14
- - Cysiaczek   Osobiście, to mi się ten array nie podoba. Może je...   30.05.2006, 15:38:46
- - NuLL   Dostep tablicowy jest szybszy - nie ma sensu tworz...   30.05.2006, 15:42:37
- - Prph   No i jeszcze mozna wziac pod uwage to, ze niekonie...   30.05.2006, 15:51:02
- - Cysiaczek   A może pobierac dane tylko wtedy, gdy będzie taka ...   30.05.2006, 15:54:05
- - NuLL   Duzych plikow konfiguracyjnych sie nie tworzy. Duz...   30.05.2006, 15:54:37
- - Cysiaczek   No widzisz NuLL. Może jednak obiekty, bo zarządzac...   30.05.2006, 15:56:47
- - NuLL   Pokaz mi przewage obiektow nad tablicami Plusy pr...   30.05.2006, 15:58:46
- - Prph   Odnosnie obiektowego podejscia. Chodzi np o uzyska...   30.05.2006, 16:10:53
- - NuLL   Prph - da sie. Tylko po co ? Poczytaj o __get w m...   30.05.2006, 17:57:16
- - Prph   __get znam, ale umiem tylko jeden poziom odczytac....   30.05.2006, 21:18:47
- - hwao   zagniezdzasz pare obiektow i jedziesz po koleji po...   30.05.2006, 22:03:22
- - Prph   Tak myslalem.... Beznadziejnie Ma byc prosta Na...   31.05.2006, 06:18:33
- - arturwow   Ja na potrzeby swojego frameworka popełniłem takie...   9.07.2006, 12:46:20
- - Ociu   Najogólniej to zrobiłem to tak: [PHP] pobierz, pla...   10.07.2006, 08:38:00
- - Ludvik   Co do powyższego kodu - dziwnie według mnie napisa...   10.07.2006, 09:43:12
|- - Ociu   Cytat(Ludvik @ 10.07.2006, 10:43 ) Co do ...   13.07.2006, 07:58:12
- - Strzałek   Ja skorzystałem z ArrayAccess [PHP] pobierz, pla...   10.07.2006, 11:16:15
- - bigZbig   A ja proponuję zapoznać się z Zend_...   11.07.2006, 06:50:52


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 13:26