Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Singleton jako klasa ustawien, jak przy tworzeniu prawidlowo ustawic dane
karmelik
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.12.2014

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


Mam wzór klasy z uzyciem wzorca Singleton:
  1. class Config{
  2.  
  3. private static $instance;
  4.  
  5. private $config = array();
  6.  
  7. private function __construct() {}
  8. private function __clone() {}
  9.  
  10. public static function getInstance() {
  11. if(self::$instance === null) {
  12. self::$instance = new Config();
  13. }
  14. return self::$instance;
  15. }
  16.  
  17. }


Teraz chcialbym zeby przechowywala ona ustawienia aplikacji ktore pobieram z bazy danych (czyli inna klasa to pobiera). Ze wzgledu na poczatki z wzorcami projektowymi, pytanie jak przerobic ta klase zeby mozna bylo ja wywolac razem z danymi wejsciowymi. W konstruktorze, w getInstance ? czy moze utworzyc metode ktora bedzie zapisywala dane wejsciowe juz po utworzeniu instancji. Mysle ze wszystkimi sposobami daloby rade, ale ktory jest prawidlowy ? Wolalbym nie robic profanacji juz od poczatku wink.gif

Edit: chodzi mi tylko o podpowiedz "któredy" powinno sie wgrywac dane do klasy. Sam sobie napisze wszystko tylko któredy zrobic to zeby bylo prawidlowo.

Ten post edytował karmelik 10.03.2015, 08:56:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


__construct
Go to the top of the page
+Quote Post
karmelik
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.12.2014

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


Sporo mi z tym zeszło ale w koncu doszedlem, moze sie komus przyda:
  1. class Config{
  2.  
  3. private static $instance;
  4.  
  5. private $config = array();
  6.  
  7. private function __construct(array $config) {
  8. $this->config = $config;
  9. }
  10. private function __clone() {}
  11.  
  12. public static function getInstance(array $config) {
  13. if(self::$instance === null) {
  14. self::$instance = new Config($config);
  15. }
  16. return self::$instance;
  17. }
  18.  
  19. }
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nie do końca.

Jeżeli to jest klasa stricte do configa to w samym konstruktorze powineneś zadbać o pobieranie danych.

Co jak będziesz w 1000 miejscach używam Config::getinstance();
To co za każdym razem masz tam przekazywać konfiguracje? Bez sensu.
Możesz co najwyżej przekazać obiekt który zajmie się importem konfiguracji do Singletonu, albo nawet nic nie przekazywać. Niech Singletn sam sobie pobierze dane jak chce.
Go to the top of the page
+Quote Post
karmelik
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.12.2014

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


Właśnie nie wiem jak to zrobić. Musiałbym zrobić tak:

  1. public static function getInstance() {
  2. if(self::$instance === null) {
  3. $db = new Database();
  4. $config = $db->pobierz_konfiguracje();
  5. self::$instance = new Config($config);
  6. }
  7. return self::$instance;
  8. }


czyli drugi raz wykorzystac klase do polaczenia i obslugi bazy danych, drugi raz ja zainicjowac. Ewentualnie stworzyc nowa klase tylko do pobierania ustawien ktora rozszerza klase do polaczenia bazy danych. Ewentualnie zrobic klase Database jako singleton i z niej korzystac ? Albo moze ja klonowac ? Nie wiem kurcze jak do tego podejsc zeby klasy same sobie radzily i nie inicjowac pare razy tych samych klas w innych klasach :/ dopiero poczatkuje w klasach i wzorcach projektowych :/ Podrzuc prosze jakies pomysly.
Go to the top of the page
+Quote Post
com
post
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


To już Ci napisał Pyton_000
Więc jeszcze raz zacytuje
Cytat
w samym konstruktorze powineneś zadbać o pobieranie danych

A nie w getInstance()
Go to the top of the page
+Quote Post

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 - 13:23