Manuál PHP | ||
---|---|---|
Předcházející | Kapitola 12. Proměnné | Další |
Kontext ("scope") proměnné
Kontext proměnné je oblast, ve které je definována. Většina proměnných v PHP má pouze jediný kontext. Ten zahrnuje i soubory vložené pomocí "include" nebo "require". Například:
Zde bude proměnná $a
dostupná ve vloženém skriptu
b.inc. Avšak uvnitř uživatelsky definovaných funkcí
se zakládá jejich lokální kontext. Jakákoli proměnná použitá uvnitř
funkce je implicitně omezena na tento místní kontext. Například:
$a = 1; /* globální kontext */ |
Tento skript nevyprodukuje žádný výstup, protože konstrukt "echo"
odkazuje na lokální verzi proměnné $a
, a ta nemá
v tomto kontextu přiřazenu žádnou hodnotu. Můžete si všimnout, že to je
trochu jiné než v jazyce C, kde jsou globální funkce automaticky
dostupné ve funkcích, pokud nejsou specificky zastíněny lokální definicí.
To může způsobit problémy tím, že člověk může nechtěně změnit globální
proměnnou. V PHP musí být globální proměnné deklarovány uvnitř funkce
jako globální, pokud se v ní mají používat. Příklad:
Výše uvedený skript vytiskne "3". Deklarací
$a
a $b
ve funkci jako globálních
proměnných se dosáhne toho, že při odkazování na proměnné se pracuje
s jejich globální verzí. Počet globálních proměnných, se kterými lze ve
funkci manipulovat, není omezen.
Druhým způsobem, jak přistupovat k proměnným z globálního kontextu, je
použití speciálního pole $GLOBALS
, definovaného
v PHP. Předchozí příklad lze přepsat:
Pole $GLOBALS
je asociativní pole s názvem globální
proměnné jako klíčem a obsahem příslušné proměnné jako obsahem elementu
pole.
Jinou důležitou vlastností rozlišování kontextů proměnných je možnost používání static proměnných. Statická proměnná existuje pouze v lokálním kontextu funkce, ale neztrácí svoji hodnotu, pokud provádění programu tento kontext opustí. Uvažujme následující příklad:
Tato funkce je poněkud neužitečná, neboť při každém volání nastavuje
$a
na 0 a tiskne "0".
Konstrukt $a
++, který inkrementuje proměnnou, nemá
žádný význam, protože při skončení vykonávání funkce se obsah proměnné
$a
ztrácí. Aby měla funkce skutečný význam čítače a
hodnota se neztrácela, deklaruje se proměnná $a
jako statická:
Nyní se při každém volání funkce Test() vytiskne hodnota proměnné
$a
a inkrementuje se.
Statické proměnné také poskytují způsob, jak řešit rekurzívní funkce.
Rekurzívní funkce je taková funkce, která volá sama sebe. Psaní
rekurzívních funkcí je třeba věnovat zvláštní péči, protože může vzniknout
nekonečný cyklus volání. Musíte se ujistit, že máte rekurzi adekvátně
ukončenu. Následující jednoduchá funkce rekurzívně počítá do 10 za použití
statické proměnné $count
ke zjištění okamžiku pro
ukončení:
Předcházející | Domů | Další |
Předdefinované proměnné | Nahoru |