Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 6
autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12
Przy korzystaniu z funkcji i klas pojawia się problem zasięgu zmiennych. Problem ten dotyczy większości języków programowania. Ogólnie mówiąc chodzi o to, że zmienne dostępne są zazwyczaj tylko w tym zasięgu, w którym zostały zdeklarowane. Przez zasięg rozumiem zasięg główny (to znaczy część kodu, która nie należy do żadnej funkcji lub klasy), klasy i funkcje. Oto przykład funkcjonowania zasady utrzymania zasięgu:
<? $a = 34; function aaa(){ echo $a; } aaa(); ?>
Pomimo, że zmienna $a została zadeklarowana wcześniej, to nic się nie wyświetli, ponieważ zmienna $a nie jest dostępna wewnątrz funkcji. Dostęp do zmiennych globalnych można uzyskać na 2 sposoby. Po pierwsze, można powiadomić PHP że dana zmienna ma być pobierana z zasięgu głównego za pomocą instrukcji global:
<? $a = 23; function aaa(){ global $a; echo $a; } aaa(); ?>
W tym przykładzie zostanie wyświetlona prawidłowa wartość zmiennej $a. Istnieje też druga metoda dostania się do zmiennych globalnych. W każdym miejscu kodu dostępna jest tablica asocjacyjna $GLOBALS, której kluczami są nazwy zmiennych dostępnych w zasięgu głównym.
Istnieje jeszcze jeden aspekt dotyczący zasięgu zmiennych: zmienne statyczne.
<? function aaa(){ $a = 0; echo $a; $a++; } aaa(); aaa(); aaa(); ?>
Powyższy przykład jest w zasadzie bez sensu - za każdym razem wyświetlona będzie wartość 0, ponieważ za każdym wywołaniem funkcji zmienna $a będzie od nowa inicjowana wartością 0 a po wyświetleniu i inkrementacji tej zmiennej będzie ona niszczona (wszystkie zmienne inicjowane w funkcji oprócz statycznych są niszczone po wykonaniu się funkcji).
<? function aaa(){ static $a = 0; echo $a; $a++; } aaa(); aaa(); aaa(); ?>
Natomiast w tym przykładzie wyświetlone zostaną wartości 0, 1 i 2. Dzieje się tak, ponieważ mimo że zmienna jest inicjowana wartością 0, to dzięki instrukcji static dzieje się to tylko raz, a do tego po zakończeniu wykonywania się funkcji zmienna ta nie jest niszczona.
W PHP 4.1.0 wprowadzone zostały tak zwane tablice superglobalne. Są one tworzone przez PHP - użytkownik nie może samemu tworzyć takich tablic. Zawierają one dane przekazywane do PHP metodami GET, POST, informacje o przekazanych plikach, dane z ciasteczek i sesji - odpowiedno $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION. Mają one zastąpić tablice $HTTP_*_VARS, które ze względu na kompatybilność są jeszcze obecne. Różnica między tablicami superglobalnymi a tymi używanymi wcześniej jest taka, że tablice superglobalne dostępne są w dowolnym miejscu kodu, bez potrzeby użycia instrukcji global.
Leszek 'leon' Krupiński
szukaj: zasięg zmiennych tablice superglobalne kurs php
Zagadnienia poruszane w tej części kursu:
© 2004-2008 copyright by webmade.org