Guadagna online

Fidelityhouse.eu

martedì 14 febbraio 2012

PHP Base - 5° Lezione

Con le strutture di controllo andiamo ad analizzare un altro degli aspetti fondamentali della programmazione: la possibilità 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:
{codecitation class="brush: php; gutter: false;"}
if( )
{

}

{/codecitation}
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. 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, esempio:
{codecitation class="brush: php; gutter: false;"}
if ($nome == 'Mario') {
echo "ciao Mario!
";
echo "come stai?
";
}
echo "saluti finiti!";
{/codecitation}
In questo modo, se la variabile $nome ha effettivamente il valore 'Mario' 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 "saluti finiti!" viene prodotta in ogni caso. Per convenzione è 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.
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:
{codecitation class="brush: php; gutter: false;"}
if (2) {
print "ciao Mario!";
}
{/codecitation}
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. Questo 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'
  • un array con zero elementi
  • una stringa vuota (empty)
  • un valore NULL, cioè una variabile che non è stata definita oppure a cui è stato assegnato il valore NULL esplicitamente
Analizziamo ora un caso che spesso crea problemi. Vediamo questo codice
{codecitation class="brush: php; gutter: false;"}
$x = 5;
if ($x = 8)
echo '$x è uguale a 8!';
{/codecitation}
A prima vista, qualcuno potrebbe essere ingannato da queste istruzioni perchè un'espressione come $ x = 3 potrebbe essere sia un'assegnazione che un test. Infatti ci si aspetta che questo blocco di codice non stampi niente, invece non è così. Provando il codice, si può vedere invece sul browser la frase '$x è uguale a 8'. 
Questo succede perchè l'espressione che abbiamo messo fra parentesi è un'assegnazione: cioè essa assegna alla variabile $x il valore 8. L'istruzione seguente viene quindi eseguita, per il motivo che abbiamo visto prima: il valore della nostra espressione è 8, 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:
{codecitation class="brush: php; gutter: false;"}
$x = 5;
if ($x == 8)
echo '$x è uguale a 8!';
{/codecitation}
Ricordiamoci quindi, quando vogliamo verificare se il valore di una variabile è uguale ad un qualcosa, di utilizzare l'operatore condizionale di uguaglianza, cioè il doppio uguale ("=="). In caso contrario, non solo otterremo molto spesso risultati errati, ma avremo anche modificato il valore di una variabile che volevamo soltanto verificare.

0 commenti:

Posta un commento

adf.ly 2.3g