Le variabili locali e globali

La visibilità delle variabili (detta anche scope) definisce l'ambito entro cui una variabile può essere usata, che può essere local, global o static.

Normalmente una variabile è global, cioè è visibile in tutto il file .php in cui viene creata tranne che all'interno delle funzioni definite dal programmatore. Le variabili all'interno delle funzioni definite dal programmatore sono local, cioè sono visibili solo all'interno di esse e dentro alle funzioni non sono visibili le variabili global.

In questo esempio la chiamata alla funzione cheversofa() non produrrà l'effetto voluto perchè le variabili che hanno valore "gatto" e "miagolio" non sono visibili dentro la funzione.

<?php 
function cheversofa() {
echo "<p>l'animale ".$animale." fa il verso: ".$verso."</p>";
}
$animale = "gatto";
$verso = "miagolio";
cheversofa();
 ?>

In questo esempio forziamo lo scope delle due variabili mediante la parola chiave global.

<?php 
function cheversofa() {
  global $animale;
  global $verso;
echo "<p>l'animale ".$animale." fa il verso: ".$verso."</p>";
}
$animale = "gatto";
$verso = "miagolio";
cheversofa();
 ?>

Dentro la funzione indichiamo che le variabili $animale e $verso devono essere globali e quindi visibili anche al di fuori di essa.

Tutte le variabili globali vengono raccolte in un array chiamato $GLOBALS[$i] dove $i è il nome che abbiamo scelto per la variabile.

Quando una funzione definita dal programmatore viene terminata, tutte le variabili locali, non dichiarate global e quindi non salvate nell'array $GLOBALS sono cancellate. Per evitare questo possiamo usare la parola chiave static che non modifica lo scope della variabile ma impedisce che questa sia cancellata alla fine della funzione.

Nell'esempio dopo ogni chiamata della funzione contatore() la variabile $volte viene distrutta quindi il suo valore sarà sempre 0.

 <?php
function contatore()
{ 
    $volte = 0;
    echo "<p>A questa chiamata la variabile vale ".$volte++."</p>";
} 
contatore();
contatore();
contatore();
contatore();
?>

Ora aggiungiamo la parola chiave static

<?php
function contatore()
{ 
    static $volte = 0;
    echo "<p>A questa chiamata la variabile vale ".$volte++."</p>";
} 
contatore();
contatore();
contatore();
contatore();
?>

Le variabili superglobali

Le variabili superglobali sono automaticamente disponibili in qualunque punto dello script. Sono organizzate in array associativi.

<?php 
echo "<p>ecco una serie di informazioni relative ai cookies:</p>";
print_r($_COOKIE);
 ?>
Le variabili superglobali
Nome Array Descrizione
$GLOBALS contiene tutte le variabili globali accessibili dallo script locale
$_SERVER contiene le variabili relative all'ambiente del server web
$_GET contiene le variabili passate tramite parametri URL (metodo GET del protocollo HTTP)
$_POST contiene le variabili passate tramite il metodo POST del protocollo HTTP
$_COOKIE contiene informazioni sui cookie
$_FILES contiene informazioni sui files di cui viene fatto l'upload tramite il metodo POST
$_ENV contiene informazioni sull'ambiente dello script
$_REQUEST l'insieme di $_GET, $_POST e $_COOKIE
$_SESSION contiene le variabili registrate nella sessione