|
Per quanto riguarda i valori booleani, in PHP sono considerati falsi la stringa vuota, la stringa che vale "0", i valori zero
intero e in virgola mobile, e gli array che non contengono elementi. Tutti gli altri casi il valore è vero.
RIFERIMENTO: Per il controllo di flusso PHP prevede dei comandi che sono sostanzialmente gli stessi di Java e
JavaScript, ma con delle estensioni per semplificare l'incorporazione nell'HTML. Per quanto riguarda i comandi di
controllo di flusso si rimanda a questa
sezione di CorsoJava.it. I concetti sono esattamente gli stessi, a parte poche e semplici
differenze dovute principalmente alle diverse strutture dati:
- Non ci sono controlli di tipo sulle espressioni delle condizioni: mentre in Java l'espressione deve risultare booleana,
in PHP si può usare qualunque espressione, e il vero o falso viene determinato dalle regole del PHP.
- L'espressione di controllo di switch e i valori che seguono case non sono obbligatoriamente un intero ma
possono essere anche una stringa o un valore in virgola mobile.
- break e continue non ammettono etichette.
- Non esiste il comando try-catch-finally
Esaminiamo le estensioni del PHP. Alcune istruzioni strutturate hanno una sintassi alternativa. Consideriamo le seguenti
istruzioni strutturate:
if(espressione) {
comandi
} else if (espressione) {
comandi
} else {
comandi
}
while(espressione) {
comandi
}
for(espressione;espressione;espressione) {
comandi
}
Le sintassi alternative disponibili permettono di evitare le graffe e sono più leggibili all'interno dell'HTML in cui il
codice si pone all'interno di blocchi <? ?>. Le sintassi alternative sono:
if(espressione):
comandi
elseif(espressione):
comandi
else:
comandi
endif;
while(espressione):
comandi
endwhile;
for(espressione;espressione;espressione):
comandi
endfor;
Per esempio:
<? if($show): ?>
<table>
<? while(hasMoreElements()): ?>
<tr><td><? echo getNextElement(); ?>
<? endwhile ?>
</endtable>
<? else: ?>
<h1>Non trovato</h1>
<? endif; ?>
Vediamo adesso come esempi di comandi i vari modi in cui è possibile scandire un array. Il modo più semplice è con
un ciclo che itera sui vari elementi.
for($i=0; $i<count($a); ++$i)
print "$i: $a[$i]\n";
La funzione count ritorna il numero di elementi. Questo metodo funziona correttamente fintanto che gli elementi
contenuti nell'array hanno tutti indici numerici; se tuttavia l'array contiene anche valori indicizzati da stringhe, il count
ritorna un numero che comprende anche questi elementi. Il ciclo tuttavia non funziona perché gli elementi indicizzati da
stringhe non sono accessibili utilizzando un l'indice numerico.
Un modo più corretto di attraversare un array è sfruttare il suo elemento corrente. Ogni array mantiene un
puntatore interno alla posizione corrente. La funzione reset porta il puntatore al primo elemento, la funzione next lo
fa avanzare al successivo e la funzione current ritorna l'elemento corrente. Utilizzando queste funzioni la maniera
corretta di scandire gli array è:
if(reset($a)) do {
print current($a). "\n";
} while(next($a));
Questo metodo non è particolarmente elegante da scrivere, anche se è questo il modo corretto di gestire i casi in cui
l'array è vuoto. Per rendere ancora più agevole l'attraversamento di un array comprendendo sia indici che chiavi, si usa
la primitiva each. Questa primitiva permette di iterare tra i vari elementi di un array: ad ogni invocazione, restituisce
un piccolo array, che contiene una chiave e un valore dell'array che si sta iterando. È utile soprattutto con gli array
associativi, ma funziona anche con gli array solo numerici in quanto ritorna come chiavi anche gli elementi numerici. Si
usa come segue:
while( list($k, $v) = each($a))
print "$k => $v\n";
|