Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sposob na przechowywanie parametrow w obiekcie, Np. klasa Config.
Prph
post
Post #1





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

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


Witam,

Zastanawiam sie ostatnio, co jest lepszym rozwiazaniem w perspektywie wiekszej aplikacji:

  1. <?php
  2. $aConfig['system']['db']['host'] = '127.0.0.1';
  3.  
  4. $oConfig = new Config($aConfig);
  5.  
  6. // Rozwiazanie 1.
  7. $host = $oConfig->system->db->host;
  8.  
  9. // Rozwiazanie 2.
  10. $host = $oConfig->get('system', 'db', 'host');
  11. ?>


Moim zdaniem pierwsze rozwiazanie jest 'ladniejsze' i duzo bardziej wygodne. No i zaczynaja sie schody:

  1. <?php
  2. $host = $oConfig->system->jakas_nieistniejaca_zmienna->host;
  3. // Zwroci NOTICE informuujace o tym, ze nastepuja odwolanie do nieistniejacego obi
    ektu - no bo zachowa sie jak: null->host;
  4.  
  5. $host = $oConfig->get('System', 'nieistneijaca_zmienna', 'host');
  6. // Zwroci po prostu null bez zadnego bladu.
  7. ?>


Ok. pojawia sie magiczne __isset(). Ale:

  1. <?php
  2. var_dump(isset($oConfig->host)); // zwroci false;
  3. var_dump(isset($oConfig->db->host)); // zwroci false, ale tak naprawde metoda __isset nie zostanie wywolana (?)
  4.  
  5. var_dump(isset($oConfig->db->cos->host)) // zwroci false i wyswietli Notice: odwolanie do nieistniejacego obiektu.
  6. ?>


Kod:

  1. <?php
  2. class ParametersHolder
  3. {
  4. private $_aParameters;
  5. private $_bValidIterationPointer;
  6.  
  7. public function __construct($aParameters = array())
  8. {
  9. foreach($aParameters as $sKey => $mValue)
  10. {
  11. if(is_array($mValue))
  12. $this->_aParameters[$sKey] = new ParametersHolder($mValue);
  13. else
  14. $this->_aParameters[$sKey] = $mValue;
  15. }
  16. }
  17.  
  18. public function __get($sParameter)
  19. {
  20. return isset($this->_aParameters[$sParameter]) ? $this->_aParameters[$sParameter] : null;
  21. }
  22.  
  23. public function __set($sParameter, $mValue)
  24. {
  25. if(is_array($mValue))
  26. $this->_aParameters[$sParameter] = new ParametersHolder($mValue);
  27. else
  28. $this->_aParameters[$sParameter] = $mValue;
  29. }
  30.  
  31. public function __isset($sParameter)
  32. {
  33. return isset($this->_aParameters[$sParameter]);
  34. }
  35. }
  36. ?>


Co o tum uwazacie? Moze macie lepszy sposob?

Adrian.
Go to the top of the page
+Quote Post

Posty w temacie
- Prph   Sposob na przechowywanie parametrow w obiekcie   23.08.2006, 15:26:33
- - hwao   Swojego czasu pisalem arta na ten temat -> http...   23.08.2006, 15:51:56
- - Prph   Klasa konfiguracji to akurat przyklad. Ta sama syt...   23.08.2006, 22:22:08
- - NuLL   Cytat// Rozwiazanie 1.$host = $oConfig-...   23.08.2006, 22:34:48
- - hwao   @NuLL zastanawiam się w takim razie, w jakim Ty ję...   24.08.2006, 07:57:46
- - bigZbig   A co sądzicie o Zend_Config Przykłady użycia: Wcz...   24.08.2006, 09:32:59
- - Prph   Witam, @NuLL: Zamiast sie nabijac, moze bys podal...   24.08.2006, 12:49:28
- - hwao   Pierwsze rozwiazanie to jest poprostu zapychanie n...   24.08.2006, 14:06:06
- - Prph   Tak, ktos juz mowil o twej wartosci domyslnej. W ...   24.08.2006, 17:14:49
- - NuLL   Cytat@NuLL: Zamiast sie nabijac, moze bys podal ja...   24.08.2006, 21:07:11
- - Prph   [PHP] pobierz, plaintext <?phperror_reporting...   26.08.2006, 11:23:45
- - Apo   Błedy wywala bo musisz zwracać obiekt $this w...   26.08.2006, 15:14:16
- - Prph   Yyy, a co ma piernik do wiatraka? Przeciez te blad...   26.08.2006, 15:40:35
- - NuLL   W sumie troche bubla napisalem - lepiej byloby to ...   26.08.2006, 16:23:11
- - Prph   No teraz jest ok, ale jak mam uzywac try, catch, t...   26.08.2006, 16:33:12
- - DjKermit   Sory za odgrzewanie kotletów ale zastanawiałem się...   22.03.2007, 14:48:32
- - Hacker   Odgrzane to ja jeszcze podgrzeje. zrobiłbym p...   29.03.2007, 18:24:22
- - siemakuba   To ja też do odgrzania się przyczynię. U siebie ...   30.03.2007, 15:48:27
- - DeyV   a ja się zastanawiam, dlaczego taka obawa przed st...   6.04.2007, 21:46:16
- - Sedziwoj   jak użyjesz throw i ktoś tego nie wyłapie to też w...   6.04.2007, 22:26:51
- - LBO   Mi się podoba mechanizm configu w Agavi. Wyglądał...   7.04.2007, 20:26:31


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 - 19:41