Lo scope delle variabili
Passiamo ora ad un altro argomento molto importante, che è l'ambito (scope) delle variabili. Infatti, le variabili utilizzate in una funzione esistono solo all'interno della funzione stessa, mentre non sono definite nè per le altre funzioni nè nello script principale. Allo stesso modo, le variabili usate dallo script principale non vengono viste dalle funzioni. Questa è una caratteristica molto importante del linguaggio, perchè ci permette di definire le funzioni con la massima libertà nel dare i nomi alle variabili al loro interno, senza doverci preoccupare che nel nostro script (o in qualche altra funzione) ci siano variabili con lo stesso nome il cui valore potrebbe risultare alterato. Questo significa, per tornare all'esempio precedente, che se avessimo scrittoprint $num2
all'esterno della funzione il_maggiore()
, non avremmo ottenuto alcun risultato, e anzi avremmo ricevuto un errore di tipo notice, in quanto la variabile $num2
, in quell'ambito, non è definita.
Le variabili utilizzate all'interno di una funzione si chiamano variabili locali. Le variabili utilizzate dallo script principale, invece, sono dette variabili globali.
Normalmente, quindi, se una funzione ha bisogno di un certo dato, è sufficiente includerlo tra i parametri che le dovranno essere passati. Tuttavia, esiste una possibilità per consentire ad una funzione di vedere una variabile globale: si tratta di dichiararla attraverso l'istruzione global.
function stampa($var1, $var2) { global $a; print $a; } $a = 'ciao a tutti'; $b = 'buongiorno'; $c = 'arrivederci'; stampa($b, $c);
stampa()
, assegna un valore a tre variabili globali: $a
, $b
e $c
. Viene poi chiamata la funzione stampa()
, passandole i valori di $b
e $c
, che nella funzione si chiamano $var1
e $var2
ma che al suo interno non vengono utilizzati. Viene invece dichiarata
la variabile globale $a, che è valorizzata con la stringa 'ciao a
tutti', e quindi questo è ciò che viene stampato a video dall'istruzione
print. Se non ci fosse l'istruzione "global $a", la variabile $a
risulterebbe non definita all'interno della funzione, e quindi la print genererebbe un errore.
Noi comunque sconsigliamo di utilizzare le variabili globali in questo modo, perchè fanno perdere chiarezza allo script e alla funzione stessa.
Termine della funzione e valore restituito. Abbiamo visto in precedenza che la funzione termina con l'istruzione return, la quale può anche essere utilizzata per restituire un valore. Nel caso in cui non sia scopo della funzione quello di restituire un valore, utilizzeremo semplicemente return. Viceversa, nel caso in cui volessimo restituire più di un valore, siccome la sintassi di PHP ci consente di restituire una sola variabile, potremo utilizzare un array. Vediamo un esempio, immaginando una funzione il cui scopo sia quello di ricevere un numero e di restituire il suo doppio, il suo triplo e il suo quintuplo:
function multipli($num) { $doppio = $num * 2; $triplo = $num * 3; $quintuplo = $num * 5; $ris = array($doppio, $triplo, $quintuplo); return $ris; }
$a = 7;
$mul = multipli($a); // $mul sarà un array a 3 elementi
$mul = multipli($a); // $mul sarà un array a 3 elementi
list($doppio, $triplo, $quintuplo) = multipli($a);
list()
serve ad assegnare i valori di un
array (quello indicato a destra dell'uguale) ad una serie di variabili
che gli passiamo fra parentesi. Ovviamente è possibile utilizzarlo non
solo per "raccogliere" il risultato di una funzione, ma con qualsiasi
array:
$arr = array('Marco','Paolo','Luca');
list($primo, $secondo, $terzo) = $arr;
list($primo, $secondo, $terzo) = $arr;
$primo
prenderà il valore 'Marco', $secondo
il valore 'Paolo', $terzo il valore 'Luca'.
Un'ulteriore precisazione: poco fa abbiamo detto che la funzione termina con l'istruzione
return
.
In realtà ciò non è necessario: infatti, nel caso in cui non ci siano
valori da restituire, possiamo anche omettere l'istruzione return
,
e l'esecuzione della funzione terminerà quando arriverà in fondo al
codice relativo, restituendo il controllo allo script principale (o ad
un'altra funzione che eventualmente l'ha chiamata).
Argomenti facoltativi
In determinate situazioni possiamo prevedere delle funzioni in cui non è obbligatorio che tutti gli argomenti previsti vengano passati al momento della chiamata. Abbiamo visto, infatti, nella lezione precedente, che alcune funzioni di PHP prevedono dei parametri facoltativi. La stessa cosa vale per le funzioni definite da noi: se infatti, al momento in cui definiamo le funzioni, prevediamo un valore di default per un certo parametro, quel parametro diventerà facoltativo in fase di chiamata della funzione, e, nel caso manchi, la funzione utilizzerà il valore di default.Come esempio consideriamo una funzione che stampa i dati anagrafici di una persona:
function anagrafe($nome, $indirizzo, $cf='non disponibile') {
print "Nome: $nome
";
print "Indirizzo: $indirizzo
";
print "Codice fiscale: $cf
";
}
print "Nome: $nome
";
print "Indirizzo: $indirizzo
";
print "Codice fiscale: $cf
";
}
$cf
avrà proprio quel valore; se invece tutti e tre gli argomenti vengono
indicati, il valore di default viene ignorato. Vediamo due esempi di
chiamata di questa funzione:
anagrafe('Mario Rossi', 'via Roma 2', 'RSSMRA69S12A944X');
anagrafe('Paolo Verdi', 'via Parigi 9');
anagrafe('Paolo Verdi', 'via Parigi 9');
Nome: Mario Rossi
Indirizzo: via Roma 2
Codice fiscale: RSSMRA69S12A944X
Indirizzo: via Roma 2
Codice fiscale: RSSMRA69S12A944X
Nome: Paolo Verdi
Indirizzo: via Parigi 9
Codice fiscale: non disponibile
Indirizzo: via Parigi 9
Codice fiscale: non disponibile
0 commenti:
Posta un commento
Proponi un'idea, segnalaci un problema.
Entra a far parte di CS3, pubblica i tuoi articoli.
Scrivi un commento!