Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z dostępem do zmiennej
Forum PHP.pl > Forum > Przedszkole
marcinek37
Na wstępie zaznaczę, aby nie doszukiwać się sensu w poniższym kodzie
chcę jedynie zrozumieć zasadę działania

mamy 4 pliki - dla ułatwienia do pobrania tutaj: http://www.speedyshare.com/a9FEG/test.rar

index.php
  1. <?php
  2. include_once('config.php');
  3. include_once('klasa.php');
  4. $router = new Klasa();
  5. ?>


config.php
  1. <?php
  2. $zmienna1 = 'jeden';
  3. $zmienna2 = 'dwa';
  4.  
  5. function funkcja(){
  6. global $zmienna2;
  7. echo $zmienna2;
  8. }
  9. ?>


klasa.php
  1. <?php
  2. class Klasa{
  3.  
  4. public function __construct(){
  5. include_once('kontroler.php');
  6. }
  7.  
  8. }
  9. ?>


kontroler.php
  1. <?php
  2. include('config.php');
  3. echo $zmienna1;
  4. echo funkcja();
  5. ?>


po uruchomieniu pojawi się błąd, bo dwa razy jest includowany plik config.php (zrobiłem to umyślnie)
- gdy usunie się includowanie pliku config.php w pliku index.php, pojawi się komunikat "jeden"
- gdy pozostawi się includowanie pliku config.php w pliku index.php, a usunie się go w pliku kontroler.php, pojawi się komunikat "dwa"

zależy mi na tym, aby plik z ważnymi zmiennymi i funkcjami był includowany raz i pokazywał się komunikat "jeden dwa"
mam listę pewnych zmiennych, które są mi potrzebne w wielu miejsach, tam samo jak funkcje, które je "wciągają" i są w jakiś sposób przetwarzane
w takim układzie jest to niemożliwe, a tworzenie dwóch tych samych plików jest bez sensu
co mam zrobić? jak Wy dajecie sobie z tym radę?
abjk
Zmienna $zmienna1 jest nie zdefiniowana w klasie. Upraszczając, dzieje się to:

  1. <?php
  2. class Klasa {
  3. public function __construct(){
  4. echo $zmienna1; //PHP Notice: Undefined variable: zmienna1
  5. echo funkcja();
  6. }
  7. }
  8. ?>
marcinek37
zdaję sobie sprawę, że zmienne "gubią" się po drodze
chcę jednak wiedzieć, jak można to zmienić

mam 50 zmiennych, które są mi potrzebne w różnych miejsach

myślałem już nawet nad tym, aby wszystkie zmienne dać do jednej tablicy i przekazywać ją krok po kroku, ale to nie będzie wygodne
slashynsky
Zainteresuj się np. wzrorcem registry. Możesz w nim przechowywać zmienne jak i inne obiekty i załączać je w innych klasach.
marcinek37
1. czy to jedyna metoda?
2. czy wg Ciebie w tym wątku temat wzorców został wyczerpany? http://forum.php.pl/index.php?showtopic=66523
slashynsky
Jest to tylko jeden ze sposobów, może to byc singleton, fabryka lub sposób podany przez Ciebie - ilu programistów tyle rozwiązań i teorii smile.gif
marcinek37
znalazłem coś takiego:
  1. <?
  2. class Registry{
  3. private static $reg = array();
  4.  
  5. public static function add($key, $value){
  6. self::$reg[$key] = $value;
  7. }
  8.  
  9. public static function add_array($array){
  10. foreach($array AS $key => $value){
  11. self::$reg[$key] = $value;
  12. }}
  13.  
  14. public static function get($key){
  15. return self::$reg[$key] ? self::$reg[$key] : null;
  16. }
  17.  
  18. public static function delete($key){
  19. unset(self::$reg[$key]);
  20. }
  21.  
  22. }
  23.  
  24. $a = Registry::add('zmienna', 'wartość');
  25. echo Registry::get('zmienna');
  26. ?>


przyznam, że to naprawdę świetna sprawa, jest tylko jeden duży problem - jeśli w pliku config.php mam 50 zmiennych, będę musiał 50 razy używać metody add()
chyba że wszystko wrzucę do jednej tablicy i użyję metody add_array(), czego wolałbym uniknąć

myślę nad wprowadzeniem kolejnej metody, która "zasysałaby" wszystkie zmienne ze wskazanego pliku - czy to dobry pomysł? no i jak to zrobić?
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.