Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmienna globalna
Forum PHP.pl > Forum > PHP
xfighter
Witam.

Jak zrobić aby zmienna była widoczna w całym projekcie. Raz ustawiona na początku nie zmienia i pamięta swoją wartość aż w kodzie nie przypisze się jej innej wartości?
markonix
$zmienna = true;
p-f
$GLOBALS['zmienna'] = 'wartosc';
KrzysiuFFF
Cytat(markonix @ 25.05.2014, 20:32:33 ) *
$zmienna = true;

Nie, ponieważ
  1. $zmienna = true;
  2. function foo() {
  3. return $zmienna;
  4. }
  5. var_dump(foo(), $zmienna);

da wynik false, true - chociaż dwa razy zwraca $zmienna.

W tym przypadku można zrobić, tak jak rzecze p-f:
  1. $GLOBALS['zmienna'] = true;
  2. function foo() {
  3. return $GLOBALS['zmienna'];
  4. }
  5. var_dump(foo(), $GLOBALS['zmienna']); //true true


Można też np.
  1. $zmienna = true;
  2. function foo() {
  3. return $GLOBALS['zmienna'];
  4. }
  5. var_dump(foo(), $zmienna); //true true


Albo
  1. $zmienna = true;
  2. function foo() {
  3. global $zmienna;
  4. return $zmienna;
  5. }
  6. var_dump(foo(), $zmienna); //true true


Chodzi o to, że $GLOBALS to tablica zawierająca wszystkie zmienne globalne. Można do niej coś wsadzić i z niej odczytać, ale zmienne się też do niej same dodają. A zmienna staje się globalną, jeśli zostanie zadeklarowana w global scope, tj. poza funkcjami, klasami itd. Które rozwiązanie jest najlepsze? Najwygodniejsze dla Ciebie. Jeśli w funkcji będziesz dużo operował na zmiennej, to będzie wygodniej dodać to "global $zmienna;" - wtedy funkcja nie będzie korzystała z lokalnej zmiennej, gdy napiszesz $zmienna, ale z globalnej, czyli takiej, jaką chcesz.

Chyba, że chodzi Ci także o przesyłanie między stronami. Wtedy można użyć sesji: http://www.php.net/manual/en/reserved.variables.session.php - tylko wtedy dochodzi sporo problemów z bezpieczeństwem.
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.