BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 72 | UU: 3376

Zasięg zmiennych

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.

Przykład 6.5. Zasięg zmiennych



<?php
   $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.

Przykład 6.6. Zmiana zasięgu zmiennej



<?php
   $a 
23;
   function 
aaa()
   {
      global 
$a;
      echo ;
   }
   
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.

Przykład 6.7. Zmienna statyczna



<?php
   
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).

Przykład 6.8. Zmiana zasięgu zmiennej



<?php
   
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.

Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker