Strutture di controllo PHP -Istruzione if

Strutture di controllo

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 è la if, la cui sintassi più elementare è la seguente:

if (  <condizione>  ) {
<codice>
}

Dopo l’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 , come questo  blocco di istruzioni fra due parentesi graffe, ad esempio così:

if ($nome == ‘Luca’) {
echo “ciao Luca!<br>”;
echo “dove sono i tuoi amici?<br>”;
}
echo “ciao a tutti voi”;

In questo modo, se la variabile $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. Inoltre potrebbe evitarci degli errori se ci dovesse capitare di voler aggiungere delle istruzioni al blocco condizionato dimenticando di aggiungere le graffe.

Nota

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!”;
}

Questo codice, da un punto di vista logico, non ha nessun senso, ma ci permette di capire come PHP interpreta le nostre espressioni. Infatti in questo caso la stringa “ciao Luca!” verrà sempre stampata. Accade perchè, per PHP, il valore 5, così come qualsiasi numero diverso da 0, è considerato ‘vero’.

In sostanza, PHP considera come falsi:

  • 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

Qualsiasi altro valore, per PHP è un valore vero. Quindi qualsiasi numero, intero o decimale purchè diverso da 0, qualsiasi stringa non vuota, se usati come espressione condizionale saranno considerati veri. Quindi anche la banale espressione che abbiamo utilizzato nell’esempio di prima.

Un caso

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 prima vista, qualcuno potrebbe essere ingannato da queste istruzioni, soprattutto chi ha precedenti esperienze di programmazione in linguaggi strutturati diversamente, nei quali un’espressione

come $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!’;

Quando  vogliamo dunque verificare se il valore di una variabile è uguale a qualcosa, si deve utilizzare l’operatore condizionale di uguaglianza, cioè il doppio uguale (“==“). In caso contrario, non solo otterremo molto spesso risultati diversi da quelli che ci saremmo aspettati, ma avremo anche modificato il valore di una variabile che volevamo soltanto verificare.Le strutture di controllo sono importanti.