Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> metody magiczne i odczyt z pliku settings.ini
Black-Berry
post
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Skoro po kilku konsultacjach doszedłem do wniosku, że jednak nie warto stosować tablicy $GLOBALS do przechowywania ustawień witryny zaczałem pisać klasę settings (IMG:http://forum.php.pl/style_emoticons/default/czarodziej.gif) Wygląda ona mniej więcej tak:

  1. <?php
  2. class settings //ta klasa wchodzi w skłąd klasy głównej jako singleton
  3. {
  4. private static $instance = null;
  5. private $tablica=array( "db_name"=>"test" ); //tablica przechowywująca zmienne 
  6.  
  7. public function get_instance() //funkcja do przekazania instancji - singleton
  8. {
  9. $class = __CLASS__;
  10. return self::$instance == null ? self::$instance = new $class : self::$instance;
  11. }
  12.  
  13. function __get( $name ) //magiczna metoda do pobierania zmiennych
  14. { 
  15. return strtolower( $this->tablica[$name] );
  16. }
  17. }
  18. ?>


Chciałbym teraz wczytać do tablicy '$tablica' zmienne z pliku 'settings.ini' który wyglądał będzie tak:
Kod
db_name = nazwa_bazy
db_host = nazwa_hosta
itd...

Pierwsze pytanie:
-- Czy istnieje jakaś fajna funkcja która wczyta za mnie zmienne z pliku .ini? Może ktoś ma i mógłby mi wkleić? (znalazłem już dlatego pytanie jest nieważne - funkcja $ini = parse_ini_file('file.ini'); )
-- Chciałbym jednak zapytać czy uważacie że to dobry (albo zły) sposób na napisanie takiej klasy. Pytam bo nie chce juz tego poprawiać więcej (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)

Drugie pytanie dotyczy posta którego nie mogę teraz odnaleźć ale pisało w nim, że:
Cytat
(..)metody magiczne zaciemniają kod(..)

-- Czy powinienem unikać metody magicznej? Muszę przyznać, że w tym wypadku znacznie poprawiłaby ona czytelność kodu.

Ten post edytował Black-Berry 20.02.2008, 13:05:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Black-Berry
post
Post #2





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


@Sedziwoj Trochę nie radzę sobie z tym zadaniem. Mógłbyś mi doradzić?

  1. <?php
  2. abstract class main_object
  3. {
  4. /* settings getting instance */
  5. public function settings(){ 
  6. return edc_settings::get_instance(); 
  7. }
  8.  
  9. /* db_driver getting instance */
  10. public function db_driver(){ 
  11. return mysql_db_driver::get_instance();
  12. }
  13. }
  14.  
  15. class edc_settings
  16. {
  17. private static $instance = null;
  18. public $settings = array();
  19.  
  20. public function __construct(){
  21. $this->settings=parse_ini_file('settings.ini');
  22. }
  23.  
  24. public function get_instance(){
  25. $class = __CLASS__;
  26. return self::$instance == null ? self::$instance = new $class : self::$instance;
  27. }
  28.  
  29. function __get( $name ){
  30. return strtolower( $this->settings[$name] );
  31. }
  32. }
  33. ?>

Tak więc mam główną klasę po której dziedziczą inne. Zawiera ona 2 odwołania do singletonów. Tworząc nową klasę np news dziedziczę po main

  1. <?php
  2. class news extends main_object
  3. {
  4. public function drop_linik()
  5. {
  6.  // wewnątrz funkcji mogę korzystać z settingsów bez zmiennych $GLOBALS których pon
    oć nie powinno sie używać.
  7.  print( $this->settings()->base_href . "podstrona" ); //pobieram z settingsów "base_href";
  8. }
  9. }
  10. $object_news = new news;
  11. $object_news->drop_link();
  12. ?>


Jak mam to robić inaczej ? Sugerujesz, że powinienem przekazywać obiekt $settings do konstruktora object_news ? To strasznie niewygodne.
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 04:10