L'operatore ternario in PHP, l'alternativa al costrutto if .. else.
L'operatore ternario di PHP è una valida alternativa ai costrutti condizionali, cioè quelli che generalmente sono basati sull'utilizzo combinato delle clausole "if" ed "else".
Iniziamo la spiegazione con una rapida introduzione agli operatori in PHP
Gli operatori in PHP
Gli operatori vengono utilizzati per manipolare o elaborare dati contenuti nelle variabili: possono ad esempio eseguire operazioni matematiche (come la somma o la moltiplicazione), o operare su dati di tipo stringa, o eseguire altre funzioni.
In PHP abbiamo tre tipologie di operatori: unari, binari e ternari.
Gli operatori unari
Sono utilizzati per operazioni di incremento/decremento, e necessitano di un solo operando, e da questo nasce il loro nome.
Ad esempio, per aumentare di una unità una variabile $x, scriviamo
$x++
Gli operatori binari
Necessitano di due operandi. Vediamoli molto rapidamente con esempi.
- Operatore di stringa: serve a concatenare le stringhe.
Ad esempio:
<?php $x = "Hello"; $y = " World!"; echo $x . $y; // Hello World! ?>
- Operatori aritmetici: sono utilizzati per eseguire comuni operazioni aritmetiche come addizione, sottrazione, moltiplicazione, divisione e modulo.
Ad esempio:
<?php $x = "Hello"; $y = " World!"; echo $x . $y; // Hello World! ?>
- Operatori di assegnazione: sono utilizzati per assegnare valori alle variabili durante l'esecuzione dello script.
Ad esempio:
<?php $x = 'Ciao'; $y = ' Mario'; $x .= $y; echo $x // Ciao Mario ?>
- Operatori di confronto: confrontano i valori delle variabili restituendo un valore booleano.
Ad esempio:
<?php $x = 6; $y = 8; if($x==$y){echo "x e y hanno lo stesso valore";} else{echo "x e y hanno valore diverso";} ?>
- Operatori logici: vengono utilizzati per concatenare due o più istruzioni condizionali.
Ad esempio
<?php $score = 210; if ($score >= 100 && $score < 200) { echo "Con $score punti hai vinto un cellulare"; } else if ($score >= 200 && $score < 300) { echo "Con $score punti hai vinto una macchina"; else { echo "Ritenta, sarai più fortunato"; } ?>
- Operatori bitwise: eseguono operazioni sui bit dei numeri. Mentre noi "umani" manipoliamo i numeri in base 10, cioè abbiamo 10 numeri che vanno da 0 a 9 e tutte le cifre esistenti su questa scala si basano sulla combinazione di questi, il linguaggio macchina è in base 2 e comprende solo 2 valori 0 (false) e 1 (true).
Ad esempio:
<?php $a = 1432; // in base 2: 0000 0101 1001 1000 $b = 131; // in base 2: 0000 0000 1000 0011 // or echo $a | $b,"\n"; // 1435. in base 2: 0000 0101 1001 1011 // and echo $a & $b,"\n"; // 128. in base 2: 0000 0000 1000 0000 // not echo ~$a,"\n"; // -1433. in base 2: 1111 1010 0110 0111 // xor echo $a ^ $b,"\n"; // 1307. in base 2: 0000 0101 0001 1011 // shift left di 2 echo $a << 2,"\n"; // 5728. in base 2: 0001 0110 0110 0000 ?>
Lascio a voi, nel caso, approfondire gli operatori binari, non oggetto di questa spiegazione
Operatore ternario
Il nome loro già ci fornisce una informazione di base: necessitano di tre operandi.
Questo operatore offre un modo semplice per effettuare operazioni di confronto (le cd. istruzioni condizionali), senza utilizzare i classici "if else".
E' in pratica una forma contratta di "if else", ed è rappresentata dal simbolo del punto interrogativo "?" e dai duepunti ":", e necessita di tre operandi:
- la condizione da verificare
- il simbolo "?" seguito dal valore restituito nel caso in cui la condizione sia verificata (true)
- il simbolo ":" seguito dal valore restituito nel caso in cui la condizione non sia verificata (false)
Facciamo un semplice esempio senza operatore ternario
<?php
$x = "12";
$y = "35";
if($x == $y){echo "x e y hanno lo stesso valore";}
else{echo "x e y hanno valore diverso";}
?>
Possiamo riscrivere la condizione if ... else, utilizzando l'operatore ternario in questo modo:
<?php
$x = "12";
$y = "35";
($x == $y) ? echo "x e y hanno lo stesso valore" : echo "x e y hanno valore diverso";
?>
Invece di utilizzare una istruzione condizionale basata su "if ... else" abbiamo indicato:
- la condizione da verificare
- il punto interrogativo "?" per rappresentare la condizione soddisfatta ("true"), e, in questo esempio, visualizziamo la frase "x e y hanno lo stesso valore"
- il duepunti ":", per rappresentare la condizione non soddisfatta ("false"), e, in questo esempio, visualizziamo la frase "x e y hanno valore diverso"
La sintassi da utilizzare, quindi, è la seguente:
CONDIZIONE ? VERO : FALSO
Vediamo un esempio leggermente più complesso, utilizzando l'istruzione condizionale "if ... else if ... else":
<?php
if ($punti == 1) {$reply = "hai vinto un cellulare";}
else if ($punti == 2) {$reply = "hai vinto una macchina";}
else {$reply = "ritenta, sarai più fortunato;}
?>
Con l'operatore ternario l'abbiamo convertito in questo codice
$reply = ($punti == 1 ? "hai vinto un cellulare" : ($punti == 2 ? "hai vinto un macchina" : "ritenta, sarai più fortunato"))
Cosa abbiamo fatto
- Se $punti ha come valore "1" allora il valore da restituire è "hai vinto un cellulare"
- Altrimenti: se $punti ha come valore "2", allora il valore da restituire è "hai vinto una macchina", altrimenti è "ritenta, sarai più fortunato"
Potete potete vedere, ho utilizzato due volte l'operatore ternario all'interno della stessa istruzione.
Un esempio, ancora più complesso, in cui utilizziamo tre volte l'operatore ternario:
<?php
if ($punti == 1) {$reply = "hai vinto un cellulare";}
else if ($punti == 2) {$reply = "hai vinto una macchina";}
else if ($punti == 3) {$reply = "hai vinto un aereo";}
else {$reply = "ritenta, sarai più fortunato;}
?>
Con l'operatore ternario diventa:
$reply = ($punti == 1 ? "hai vinto un cellulare" : ($punti == 2 ? "hai vinto un macchina" : ($punti == 3 ? "hai vinto un aereo" : "ritenta, sarai più fortuntato")))
Ci lasciamo con questo ultimo esempio:
<?php
$x = 9;
$y = 12;
if($x > $y){echo "Il numero maggiore è $x";}
else {echo "Il numero maggiore è $y";}
?>
Con l'operatore ternario questo codice diventa
<?php
$x = 9;
$y = 12;
echo "Il numero maggiore è: " . ($x > $y ? $x : $y);
?>
Lascio a voi convertire le vostre istruzioni condizionali con l'operatore ternario. Buon lavoro!