Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class] handyConfig
Forum PHP.pl > Inne > Oceny
SHiP
Witam mam do zaprezentowania moje kolejne dzieło, które powstało przy okazji budowy wiekszego projektu open source winksmiley.jpg.

Kod źródłowy: http://srodek.info/examples/handycode/handyConfig.php
Wynik jego działania powyższego kodu:
Kod
It works
zonk
mysql


Przykladowe uzycie
  1. <?php
  2. class testClass
  3. {
  4. function __toString()
  5. {
  6. return 'test taki ;)';
  7. }
  8.  
  9. function testMethod($add = 'doesn't work')
  10. {
  11. echo 'It '.$add.'<br/>';
  12. }
  13. }
  14.  
  15. $handyConfig = new handyConfig();
  16. $handyConfig -> database -> type -> my = 'zonk';
  17. $handyConfig -> database -> type -> my -> obj = new testClass();
  18. echo $handyConfig -> database -> type -> my -> obj -> testMethod('works');
  19. echo $handyConfig -> database -> type -> my.'<br/>';
  20. ?>


Wynik
Kod
It works
zonk


Jak widać skrypt sie łatwo nie gubi. Można deklarować całe obiekty czy tablice nawet bez wczesniejszej deklaracji gałęci potomnej. Oczywiście mozliwe jest ładowanie całych tablic z konfiguracją za pomocą funkcji assingData(); tak jak jest to zrobione w kodzie z klasą.

I jak? Co o tym sądzicie? winksmiley.jpg
hwao
Jak dla mnie, przechowywanie typowej konfiguracji w takim układzie to strata czasu, ale wielu ludzi lubie takie rozwiązanie.

Przydał by się domyślny paser do plików xml,
yml i ini aby to programista nie musiał się z tym bawić. Tak samo dobrym rozwiązaniem mogło by być zamieszczenie cache - w konstruktorze/metodzie (aby nie tracić możliwości operowania na samych zmiennych, chyba że by konstruktor sprawdzał typ pliku i odpowiednio akcje podejmował sam) klasy podaje się ścieżkę do pliku, on analizuje jaki to plik i odpowiednio go traktuje, po czym robi cache.
SHiP
@hwao: odczyt konfiguracji z plikow xml/ini moze odbywać sie za pomocą oddzielnej klasy. Ważne aby przekazać do metody assignData tablice z danymi. Singleton to tylko jedna z mozliwosci przedstawiona dla przykladu. Oczywiście postaram sie stworzyc odczyt/zapis konfiguracji z/do plikow xml/ini ale to nie jest narazie priorytetem(musze gdzies trzymac haslo do bazy a pliki xml nie sa chyba dobrym rozwiazaniem ^^).
NuLL
Cytat
Ważne aby przekazać do metody assignData tablice z danymi.

I powiedz jaka w tym wygoda ? smile.gif Wg mnie zerowa...
SHiP
@NuLL: Tutaj nie chodzi o wygode odczytu zapisu danych. Tylko o wygode późniejszego uzytkownia tych danych. Moim zadaniem było napisanie rdzenia konfiguracji. Prote rzeczy typu zapis/odczyt do pliku mysle ze juz kazdy napisać sobie potrafi tym bardziej ze w sieci roi sie od bibliotek do odczytu np plikow ini. Oczywiscie dodam to w przyszlych wersjach. Puki co mam jednak kilka wazniejszych bibliotek do napisania ;].

A wygoda w uzytkowaniu jest taka ze mozna np. dodac sobie zmienna $readOnly; i zakazać zmian przy metodzie __set(). Można tez utworzyc odczyt jednorazowy(unsetowanie po pierwszym odczycie) waznych danych. Mozliwosci jest wiele.
tuner
Aż sam się boję to wymówić, ale... Zend_Config_* smile.gif
SHiP
@tuner: rzeczywiscie pod koniec pracy zajrzałem do zenda ale ich Zend_Config łapie sie przy niektorych wywołaniach...

Od początku interesowalo mnie rozwiązanie na wątek: http://forum.php.pl/Sposob_na_przechowywan...cie_t52439.html winksmiley.jpg
hwao
Pliki XML: konfiguracja.xml.php
Kod
<!-- <?php die( 'Nie ładnie przeglądac pliki konfiguracyjne przez przeglądarke! -->' ); ?>Config file -->
<datebase ...


  1. <?php
  2. $Object = simplexml_load_file( 'konfiguracja.xml.php' );
  3. ?>



Pliki INI: konfiguracja.ini.php
Kod
; <?php die( '[/b][b]Nie ładnie przeglądac pliki konfiguracyjne przez przeglądarke!' ); ?>
cos = test;
ale = ale;

  1. <?php
  2. $aConfig = parse_ini_file( 'konfiguracja.ini.php' );
  3. ?>


I przeglądarka nie podglądnie...
SHiP
@hwao: dzięki winksmiley.jpg o tym nie pomyślałem... Znacznie mi to ułatwi prace ^^
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.