Ce face global / $GLOBALS
Variabilele din PHP au domeniu (scope). O variabilă definită în afara funcțiilor nu este vizibilă în interiorul unei funcții, iar variabilele din funcție dispar la sfârșitul ei. global $x; leagă variabila locală $x de variabila globală cu același nume.
Același lucru se poate face prin tabloul special $GLOBALS["x"], disponibil peste tot.
Variabilele globale fac codul greu de urmărit și de testat: orice funcție le poate schimba. De cele mai multe ori este mai bine să trimiți valoarea ca parametru și să o returnezi.
Exemple
Exemplul 1: Fără și cu global
<?php
$vizitatori = 10;
function fara(): void
{
echo isset($vizitatori) ? "văd variabila\n" : "nu văd variabila\n";
}
function cu(): void
{
global $vizitatori;
$vizitatori++;
echo "vizitatori = $vizitatori\n";
}
fara();
cu();
echo "în afară: $vizitatori";
Rezultat
nu văd variabila
vizitatori = 11
în afară: 11
Exemplul 2: $GLOBALS și varianta recomandată
<?php
$moneda = "lei";
function pret(float $suma): string
{
return $suma . " " . $GLOBALS["moneda"];
}
function pretCuParametru(float $suma, string $moneda): string
{
return "$suma $moneda";
}
echo pret(49.9) . "\n";
echo pretCuParametru(49.9, $moneda);
Rezultat
49.9 lei
49.9 lei
Greșeli frecvente
- Te aștepți ca o variabilă din afara funcției să fie disponibilă automat, ca în JavaScript. În PHP nu este: primești
Undefined variable. - Folosești
globalpentru conexiunea la baza de date în zeci de funcții. Trimite conexiunea ca parametru sau ține-o într-un obiect.
Comenzi înrudite
function: Definește o funcție proprie: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.function () use / fn: O funcție fără nume, salvată într-o variabilă sau dată direct altei funcții. Poate folosi variabile din exterior cu use.static / self::: Membrii static aparțin clasei, nu unui obiect anume. Se apelează cu NumeClasa::metoda(), fără new.