webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 6

Zasięg zmiennych

autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12

szukaj: zasięg zmiennych zasięg zmiennych tablice superglobalne tablice superglobalne kurs php kurs php

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

Zagadnienia poruszane w tej części kursu:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org