Domeniul de vizibilitate al variabilelor
Blocurile de cicluri și construcțiile condiționale nu formează un domeniu de vizibilitate separat, iar variabilele definite în aceste blocuri pot fi utilizate în afara lor:
$condition = true;
if($condition){
$name = "Tom";
}
echo $name; // Tom
sau
$i = 6;
switch($i){
case 5: $name = "Tom"; break;
case 6: $name = "Bob"; break;
default: $name = "Sam"; break;
}
echo $name; // Bob
Variabile locale
Variabilele locale sunt create în interiorul unei funcții. Aceste variabile pot fi accesate doar din interiorul funcției respective. De exemplu:
<?php
function showName(){
$name = "Tom";
echo $name;
}
showName();
echo $name; // nu funcționează, deoarece
// variabila $name există
// doar în interiorul funcției showName()
?>
În acest caz, în funcția showName() este definită variabila locală $name. Această variabilă poate fi accesată doar în interiorul funcției showName(), dar nu și în afara ei.
Aceeași regulă se aplică și parametrilor funcției: în afara funcției, parametrii ei nu există.
Variabile statice
Variabilele statice sunt similare cu variabilele locale, dar au particularitatea că își păstrează valoarea după terminarea execuției funcției. La fiecare nou apel al funcției, variabila statică utilizează valoarea salvată anterior. De exemplu:
<?php
function getCounter()
{
static $counter = 0;
$counter++;
echo $counter;
}
getCounter(); // counter=1
getCounter(); // counter=2
getCounter(); // counter=3
?>
Pentru a specifica că o variabilă este statică, se adaugă cuvântul cheie static. La cele trei apeluri consecutive ale funcției getCounter(), variabila $counter va fi incrementată cu unu.
Dacă variabila $counter ar fi fost o variabilă obișnuită (non-statică), atunci la fiecare apel al funcției getCounter(), ar fi afișat valoarea 1.
De obicei, variabilele statice sunt utilizate pentru a crea diferiți contori, ca în exemplul de mai sus.
Variabile globale
Variabilele globale, în mod implicit, nu sunt accesibile în interiorul unei funcții. De exemplu:
<?php
$name = "Tom";
function hello()
{
echo "Hello " . $name;
}
hello();
?>
Acest cod nu va funcționa, iar interpretatorul PHP ne va informa că variabila $name nu este definită.
Totuși, putem accesa variabilele globale în interiorul unei funcții folosind cuvântul cheie global:
<?php
$name = "Tom";
function hello()
{
global $name;
echo "Hello " . $name;
}
hello(); // Hello Tom
?>
Pentru a accesa o variabilă globală într-o funcție, se declară variabila cu același nume folosind operatorul global:
global $name;
După aceasta, variabila globală $name poate fi accesată în interiorul funcției. Putem nu doar să îi obținem valoarea, ci și să o modificăm:
<?php
$name = "Tom";
function changeName()
{
global $name;
$name = "Tomas";
}
changeName();
echo $name; // Tomas
?>
Ca alternativă la operatorul global, putem folosi array-ul integrat $GLOBALS pentru a accesa variabilele globale:
<?php
$name = "Tom";
function changeName()
{
$username = $GLOBALS["name"];
echo "Nume vechi: $username <br>";
// modificăm valoarea variabilei $name
$GLOBALS["name"] = "Tomas";
}
changeName();
echo "Nume nou: " . $name;
?>
Pentru a accesa variabila globală $name, se folosește expresia $GLOBALS["name"] - în parantezele pătrate se transmite numele variabilei (fără semnul $). Rezultatul scriptului:
Nume vechi: Tom
Nume nou: Tomas