Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Extract do public variables.
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Witam,
wiem, że za pomocą extract($array) jestem w stanie stworzyć zmienne, a więc takie coś jak poniżej mi zadziała.

  1. <php
  2. class Test
  3. {
  4. public $array = array('first' => 'first variable');
  5.  
  6. public function __construct()
  7. {
  8. extract($this->array);
  9. echo $first; //output: first variable
  10. }
  11. }
  12. ?>


Lecz jak zrobić to tak żeby zmienne z extract weszły mi pod public $array czyli otrzymałbym coś takiego
  1. <?php
  2. class Test
  3. {
  4. public $array = array('first' => 'first variable');
  5.  
  6. //tutaj juz krok kolejny po wykonaniu extract()
  7. public $first = 'first variable';
  8.  
  9. public function __construct()
  10. {
  11. extract($this->array);
  12. echo $this->first; //to powinno działać tylko i wyłącznie po wykonaniu extract ze względu na dynamiczne tworzenie zmiennych.
  13. }
  14. }



Najlepiej chciałbym mieć możliwość stworzenia czegoś na wzór powyższego z dynamicznym tworzeniem zmiennych, ale w klasie statycznej tj:
  1. class Test
  2. {
  3. private static $array = array('first' => 'first variable'); //to byłoby pobierane z pliku, ale teraz jest array na potrzeby tego postu
  4.  
  5. public static function loadConfigFile()
  6. {
  7. //rozpoznanie srodowiska, w ktorym pracuje
  8. //ładowanie pliku z konfiguracją i tym samym tymi zmiennymi na podstawie rozpoznanego srodowiska
  9. //np. ładuje config_dev.yml
  10. self::createVariables();
  11. }
  12.  
  13. /*
  14.   * $_data => data from config file after parse
  15.   */
  16. private static function createVariables($_data)
  17. {
  18. //tutaj odbieram przekazane dane z pliku i chciałbym zrobić extract
  19. extract($_data);
  20. }
  21.  
  22. }

Teraz z innej klasy chciałbym mieć do tego dostęp tj:
  1. class Start
  2. {
  3. public function __construct()
  4. {
  5. Config::loadConfigFile();
  6. echo Config::$first;
  7. }
  8. }



Da się to jakoś zrobić?
Wiem, że się trochę rozpisałem, ale mam nadzieję, że jest to w jakimś stopniu zrozumiałe.

Pozdrawiam,
Szymon
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Szymciosek
post
Post #2





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


1)
index.php
  1. <?php
  2. include_once 'Config.php';
  3.  
  4. $config = Config::getInstance();
  5. var_dump($config);
  6.  
  7. echo '<a href="logout.php">Logout</a>';


logout.php
  1. <?php
  2. include_once 'Config.php';
  3.  
  4. $config = Config::getInstance();
  5. echo $config->get('first');


Config.php
  1. <?php
  2.  
  3. <?php
  4.  
  5. class Config
  6. {
  7. public $configFile = array('first' => 'first variable');
  8. public $env = 'prod';
  9. public $data;
  10.  
  11. private static $_instance = NULL;
  12.  
  13. /*
  14.   * Creates instance of Config class
  15.   *
  16.   * @return $Config
  17.   */
  18. public static function getInstance()
  19. {
  20. if (self::$_instance === NULL)
  21. {
  22. self::$_instance = new self();
  23. }
  24. return self::$_instance;
  25. }
  26.  
  27. public function __construct()
  28. {
  29. $this->loadFile();
  30. $this->createVariables();
  31. }
  32.  
  33. public function loadFile()
  34. {
  35. switch ($this->env)
  36. {
  37. case 'prod' :
  38. $file = 'config_prod.yml';
  39. break;
  40. case 'dev' :
  41. $file = 'config_dev.yml';
  42. break;
  43. }
  44.  
  45. var_dump('Loaded file: ' . $file);
  46. }
  47.  
  48. /*
  49.   * Creates variables from the config file
  50.   */
  51. public function createVariables()
  52. {
  53. foreach ($this->configFile as $key => $value)
  54. {
  55. $this->set($key, $value);
  56. }
  57. }
  58.  
  59. public function get($_key)
  60. {
  61. return $this->data[$_key];
  62. }
  63.  
  64. public function set($_key, $_value)
  65. {
  66. $this->data[$_key] = $_value;
  67. }
  68. }


2) Co do dependency injection mam zamiar się wziąć powoli i tak ogólnie za wzorce projektowe, aczkolwiek nie wiem kiedy znajdę chwilę na to, bo matura niedługo.

Takie coś już jest dobrze wg Ciebie Crozin?

Ten post edytował Szymciosek 9.04.2013, 10:52:57
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 - 17:52