Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][OOP]Problem z rozumieniem powiązania klas
Forum PHP.pl > Forum > Przedszkole
marrrecki
Witam.
Czy ktoś może mnie naprowadzić w temacie odwoływania się do klas?
Dla przykładu mam klasę odczytującą z pliki *.ini zapisanych danych konfiguracyjnych. Klasa wygląda tak:
  1. class Configuration {
  2.  
  3. public $userconf, $appconf;
  4.  
  5. public function __construct(){
  6. if(!is_array($this->appconf)){
  7. $this->appconf = array();
  8. $this->userconf = array();
  9. }
  10. $this->appconf = parse_ini_file('config/configuration.ini');
  11. $this->userconf = parse_ini_file('config/configuration.ini', 1);
  12. }
  13.  
  14. public function set($variable, $value){
  15. if(!array_key_exists($variable,$this->appconf) || empty($this->appconf[$variable])){
  16. $this->appconf[$variable] = $value;
  17. $this->userconf['user'][$variable] = $value;
  18. } else {
  19. throw new Exception('Can not set $value ('.$value.') in $config ('.$variable.'). Variable already exists');
  20. }
  21. }
  22.  
  23. public function get($variable){
  24. if(array_key_exists($variable,$this->appconf) && !empty($this->appconf[$variable])){
  25. return $this->appconf[$variable];
  26. } else {
  27. return false;
  28. }
  29. }
  30.  
  31. public static function getAll(){
  32. echo '<pre>';
  33. print_r($this->userconf);
  34. echo '</pre>';
  35. }
  36. }


Założenie jest takie, żeby móc wykorzystać $appconf w innych klasach zarówno modelu jak i widoku.
Najprostszym rozwiązaniem byłoby wykorzystanie extends w klasie model i klasie view, jednak wtedy klasa Configuration będzie wywoływana dwa razy co spowolni działanie aplikacji. Poza tym program nie będzie mógł korzystać z metody set klasy Configuration.
Jak powinno to wyglądać? Może mnie ktoś nakierować?
Pyton_000
Albo:
1. Tworzysz sobie gdzieś obiekt klasy Configuration i przekazujesz jej obiekt do konstruktora innych klas np. View, Model itp.
2. Tworzysz klasę Configuration jako Singleton, i w klasach odwołujesz się do metody getInstacne tegoż obiektu.
3. Tworzysz sobie funkcję globalną w której ustawiasz obiekt singletona a potem robisz tylko np:
  1. config()->get('key');
  2. // Lub ekstremalnie
  3. config('key');
  4. config('key', $value);

4. Tworzysz sobie metody statyczne
owca_82
Moim zdaniem takie rzeczy, jak odczyt jakiś danych konfiguracyjnych powinny znaleźć się w klasie pomocniczej i doskonale do tego będzie nadawał się właśnie singleton.
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-2025 Invision Power Services, Inc.