Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] problem z dostępem do zmiennej
marcinek37
post
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


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ę?

Ten post edytował marcinek37 9.02.2014, 02:21:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
abjk
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 6
Dołączył: 5.04.2013
Skąd: W

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


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. ?>
Go to the top of the page
+Quote Post
marcinek37
post
Post #3





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


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
Go to the top of the page
+Quote Post
slashynsky
post
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 7
Dołączył: 7.02.2014
Skąd: Łódź

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


Zainteresuj się np. wzrorcem registry. Możesz w nim przechowywać zmienne jak i inne obiekty i załączać je w innych klasach.
Go to the top of the page
+Quote Post
marcinek37
post
Post #5





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


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
Go to the top of the page
+Quote Post
slashynsky
post
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 7
Dołączył: 7.02.2014
Skąd: Łódź

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
marcinek37
post
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


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ć?

Ten post edytował marcinek37 9.02.2014, 13:26:20
Go to the top of the page
+Quote Post

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: 25.12.2025 - 03:05