Come la maggior parte dei linguaggi di programmazione, anche PHP consente di scrivere codice che esegue azioni in base ai risultati di condizioni logiche o comparative.
Ciò significa che è possibile creare condizioni di test sotto forma di espressioni che valutano sia true
che false
e, in base a queste, eseguire determinate azioni.
È possibile farlo tramite le istruzioni condizionali del linguaggio.
Indice dei contenuti
Vediamo sintassi ed esempi di utilizzo per ciascuna di esse.
La più semplice istruzione condizionale PHP è l'istruzione if
, che viene utilizzata per eseguire un blocco di codice solo se la condizione specificata è vera.
Di seguito un esempio che ne descrive il funzionamento:
<?php
$x = 10;
$y = 8;
if ($x > $y) {
echo "$x è maggiore di $y"; // 10 è maggiore di 8
}
L'istruzione if
è seguita da una condizione racchiusa tra parentesi tonde. Le successive righe, racchiuse tra parentesi graffe, rappresentano il blocco di codice da eseguire se la condizione viene valutata come vera.
Nota: le parentesi graffe possono essere omesse nel caso il blocco di codice sia composto da una singola istruzione, ma per chiarezza è buona prassi aggiungerle sempre.
La condizione deve dare come risultato un valore booleano, dunque per essere interpretata come tale da PHP, si devono usare gli operatori di confronto esaminati nella guida dedicata agli operatori PHP.
Adesso aggiungiamo un'ulteriore istruzione che ci consente di gestire la situziazione nel caso in cui la condizione fosse false
.
È possibile migliorare il codice precedente aggiungendo un'altra istruzione che fornisce una scelta alternativa. L'istruzione if-else
consente di eseguire un blocco di codice se la condizione specificata viene valutata true
e un altro blocco di codice se viene valutata false
.
Modificando l'esempio precedente possiamo scrivere:
<?php
$x = 10;
$y = 14;
if ($x > $y) {
echo "$x è maggiore di $y";
} else {
echo "$x è minore o uguale di $y"; // 10 è minore o uguale di 14
}
È possibile combinare più condizioni tramite l'istruzione elseif
(o else if
).
Vediamo un esempio
<?php
$day = 'sabato';
if ($day == 'lunedì') {
echo "Oggi è lunedì";
} elseif ($day == 'martedì') {
echo "Oggi è martedì";
} elseif ($day == 'mercoledì') {
echo "Oggi è mercoledì";
} elseif ($day == 'giovedì') {
echo "Oggi è giovedì";
} elseif ($day == 'venerdì') {
echo "Oggi è venerdì";
} elseif ($day == 'sabato') {
echo "Oggi è sabato";
} elseif ($day == 'domenica') {
echo "Oggi è domenica";
} else {
echo "Impossibile stabilire che giorno è oggi!";
}
// Output: Oggi è sabato
L'istruzione if-else
ha una sua forma contratta rappresentata dal simbolo del punto interrogativo ?
, detto operatore ternario in quanto richiede tre operandi:
Di seguito è mostrato un esempio
<?php
$year = 2020;
echo ($year % 4 == 0) ? "$year è un'anno bisestile" : "$year non è un'anno bisestile"; // 2020 è un'anno bisestile
/* Forma normale
if ($year % 4 == 0) {
echo "$year è un'anno bisestile";
} else {
echo "$year non è un'anno bisestile";
}
*/
L'istruzione if
è stata sostituita dal punto interrogativo, mentre i due punti prendono il posto dell'istruzione else
.
Nella condizione abbiamo utilizzato l'operatore modulo %
, tramite il quale verifichiamo che il resto della divisione tra la variabile $year
e 4
sia uguale a 0
. La condizione è valutata vera, dunque viene stampato 2020 è un'anno bisestile
.
Se avessimo utilizzato la versione normale, avremmo scritto 5 righe di codice anzichè una, come mostrato in fondo all'esempio.
Nota: l'operatore ternario consente di ridurre la scrittura di codice. Tuttavia è buona norma utilizzarlo per istruzioni non particolarmente complesse, per una questione di leggibilità del codice.
L'istruzione switch
rappresenta un'alternativa più leggibile nel caso volessimo concatenare più istruzionielseif
.
L'istruzione switch
verifica una variabile rispetto a una serie di casi (case
) finché trova una corrispondenza, quindi viene eseguito il blocco di codice corrispondente.
Possiamo riscrivere l'esempio dell'istruzione elseif
utilizzando lo switch
e il costrutto case
in questo modo
<?php
$day = 'sabato';
switch ($day) {
case 'lunedì':
echo "Oggi è lunedì";
break;
case 'martedì':
echo "Oggi è martedì";
break;
case 'mercoledì':
echo "Oggi è mercoledì";
break;
case 'giovedì':
echo "Oggi è giovedì";
break;
case 'venerdì':
echo "Oggi è venerdì";
break;
case 'sabato':
echo "Oggi è sabato";
break;
case 'domenica':
echo "Oggi è domenica";
break;
default:
echo "Impossibile stabilire che giorno è oggi!";
}
// Output: Oggi è sabato
All'interno di ogni caso è presente l'istruzione break
, che indica a PHP di saltare alla fine dello switch, una volta eseguito il codice associato al primo caso true.
Alcune considerazioni da tenere a mente:
===
).break
, PHP esegue anche tutti i casi successivi finché non viene trovato un break
.break
alla fine di ciascun case
.Per le istruzioni condizionali, PHP consente una sintassi alternativa, che consiste nel sostituire la parentesi graffa di apertura con il carattere dei due punti (:), e la parentesi di chiusura con endif
nel caso dell'istruzione if
.
Si può applicare in ugual modo all'istruzione switch
, con la parentesi di chiusura sostituita da endswitch
.
La sintassi alternativa viene utilizzata per dare maggiore chiarezza al codice, sopratutto nel caso di programmi contenenti sia codice PHP che HTML, come mostrato nell'esempio:
<?php
$isLogged = true;
?>
<html>
<body>
<h1>
<?php if ($isLogged):?>
Utente loggato
<?php else:?>
Utente non loggato
<?php endif;?>
</h1>
</body>
</html>