Con le strutture di controllo andiamo ad analizzare un altro degli aspetti fondamentali della programmazione: la possibilità cioè di eseguire operazioni diverse, ed eventualmente di eseguirle più volte, in base alla valutazione di determinate condizioni. In questa lezione esamineremo le istruzioni che ci permettono di eseguire o non eseguire certe porzioni di codice.
If
La principale di queste istruzioni è laif
, la cui sintassi più elementare è la seguente:
if() { }
if
, deve essere indicata fra parentesi
un'espressione da valutare (condizione). Questa espressione verrà
valutata in senso booleano, cioè il suo valore sarà considerato vero o
falso. Nel caso in cui l'espressione non abbia un valore booleano, PHP
convertirà comunque questo valore in booleano utilizzando precise regole
che vedremo tra qualche riga. Dunque, se la condizione è vera,
l'istruzione successiva viene eseguita. In caso contrario, viene
ignorata. Potremmo anche avere la necessità di eseguire, nel caso in cui
la condizione sia vera, non una sola ma più istruzioni. Questo è
perfettamente possibile, ma dobbiamo ricordarci di comprendere questo
blocco di istruzioni fra due parentesi graffe, ad esempio così:
// .... if ($nome == 'Luca') { echo "ciao Luca! "; echo "dove sono i tuoi amici? "; } echo "ciao a tutti voi";
$nome
ha
effettivamente il valore 'Luca' vengono eseguite le due istruzioni
successive, comprese fra le parentesi graffe. Dopo avere valutato la
condizione ed eventualmente eseguito le due istruzioni previste, lo
script proseguirà con ciò che sta fuori dalle parentesi graffe. Quindi
nel nostro esempio la frase "ciao a tutti voi" viene prodotta in ogni
caso. È buona norma usare comunque le parentesi graffe per delimitare il
codice condizionato, anche quando è costituito da una sola istruzione:
infatti questo rende il codice più leggibile, ed inoltre potrebbe
evitarci degli errori se ci dovesse capitare di voler aggiungere delle
istruzioni al blocco condizionato dimenticando di aggiungere le graffe.
Dobbiamo notare un particolare, riguardo alla sintassi di questa istruzione: per la prima volta, vediamo che in questo costrutto mancano i punto e virgola. Infatti la
if
e la condizione espressa fra parentesi non devono averli; continuiamo invece a metterli nel blocco di codice condizionato.
Abbiamo detto poco fa che la condizione espressa fra parentesi potrebbe non avere un valore booleano. PHP però è in grado di considerare booleano qualsiasi valore, in base ad alcune regole molto semplici. Facciamo un altro esempio banale:
if (5) { print "ciao Luca!"; }
- il valore numerico 0, nonchè una stringa che contiene '0'
- una stringa vuota
- un array con zero elementi
- un valore NULL, cioè una variabile che non è stata definita o che è stata eliminata con unset(), oppure a cui è stato assegnato il valore NULL esplicitamente
Analizziamo ora un caso che spesso crea problemi se non viene compreso fin dalle prime battute. Vediamo questo codice
$a = 7; if ($a = 4) echo '$a è uguale a 4!';
$a = 4
potrebbe essere sia un'assegnazione che un test. Costoro infatti si
aspetteranno che questo blocco di codice non stampi niente, e
rimarrebbero molto sorpresi, qualora lo provassero, di vedere invece sul
browser la frase '$a è uguale a 4'.
Questo succederebbe perchè l'espressione che abbiamo messo fra parentesi è un'assegnazione: cioè essa assegna alla variabile $a il valore 4. L'istruzione seguente viene quindi eseguita, per il motivo che abbiamo visto prima: il valore della nostra espressione è 4, che per PHP è un valore vero. Se invece che
if ($a = 4)
avessimo scritto if ($a = 0)
l'istruzione seguente sarebbe stata saltata, perchè la nostra
condizione avrebbe preso valore 0, cioè falso. Per ottenere il risultato
corretto logicamente, avremmo dovuto utilizzare l'operatore di
confronto:
$a = 7; if ($a == 4) echo '$a è uguale a 4!';
0 commenti:
Posta un commento
Proponi un'idea, segnalaci un problema.
Entra a far parte di CS3, pubblica i tuoi articoli.
Scrivi un commento!