> **Nota:** Questo articolo potrebbe essere un po' complicato per alcuni principianti, poiché presuppone una conoscenza di base di PHP. Se siete interessati al funzionamento delle condizioni, leggete le condizioni nel corso per principianti.
Supporto: | Tutte le versioni: PHP 4, PHP 5, PHP 7 |
---|---|
Breve descrizione: | Convalida di una o più dichiarazioni |
Tipo: | Dichiarazione, costrutto (non una funzione) |
Spesso è necessario determinare se un'uguaglianza è valida o se un'affermazione è vera: a questo servono le condizioni. PHP utilizza la seguente sintassi, come molti altri linguaggi (in particolare il C):
if (/* dichiarazione logica */) {// costruire}
Ogni espressione logica ha un valore di TRUE' (vero) o
FALSE' (falso), non ci sono altre opzioni.
Esempio di confronto tra la variabile $x
e la variabile $y
:
$x = 10;$y = 5;if ($x > $y) {// Questa parte dello script viene eseguita se la condizione è vera} else {// Questa parte dello script verrà eseguita se la condizione non è applicabile}
Il costrutto di condizione ha un contenuto obbligatorio tra parentesi tonde, in cui viene fornita l'espressione da testare, composta da operatori (panoramica di seguito); più espressioni possono essere collegate utilizzando operatori logici (panoramica di seguito).
Inoltre, la condizione contiene due blocchi di istruzioni opzionali.
Per motivi pratici, bisogna sempre includere almeno il primo blocco di istruzioni quando la condizione è vera, altrimenti il test dell'espressione non avrebbe senso.
In generale:
L'unica notazione possibile con un punto e virgola (tranne quando si usa il costrutto endif):
if ($x > $y);
Tuttavia, una condizione di questo tipo non ha senso, perché in entrambi i casi il risultato del confronto verrà scartato e non verrà eseguita alcuna istruzione appartenente alla condizione.
In alcune circostanze, il costrutto `if' può essere utilizzato con l'omissione delle parentesi composte. Questo può essere ottenuto solo nei seguenti casi:
Per informazioni più dettagliate, consultare i 3 capitoli seguenti.
1. Un solo comando ~ sintassi abbreviata
Se si crea una condizione in cui si vuole eseguire un solo costrutto (istruzione), si può utilizzare la classica notazione a parentesi composta:
if ($x > 10) { $y = $x; }
Oppure possiamo omettere le parentesi:
if ($x > 10) $y = $x;
Tuttavia, questo comportamento si applica solo a un singolo comando nelle immediate vicinanze della condizione.
Un esempio migliore (solo il costrutto $y = $x
viene eseguito in modo condizionale, il resto viene sempre eseguito):
$x = 5;$y = 3;$z = 10;if ($x > $y)$y = $x;$x = 3;
2. Colon e endif;
if (/* espressione */):konstrukt;konstrukt;konstrukt;endif;
Tuttavia, questa notazione è stata a lungo considerata obsoleta perché riduce l'orientamento quando più condizioni sono immerse in se stesse.
**Nota: ** Vorrei far notare che questo stile piace anche ad alcune persone, come Yuh (vedi il suo articolo). Dio non voglia che lo usiate da qualche parte.
3. Espressione ternaria ~ notazione "in linea" a riga singola
A volte è utile eseguire un semplice confronto in linea con qualche altra azione (ad esempio, insieme alla definizione di una nuova variabile). Se si vuole eseguire una sola istruzione, l'intera procedura può essere ridotta a una sola riga, pur mantenendola il più semplice possibile.
$x = 5;$isBiggerThanTwo = ($x > 2 ? true : false);// o anche più breve:$isBiggerThanTwo = ($x > 2);// o senza parentesi:$isBiggerThanTwo = $x > 2;
All'interno della condizione vengono utilizzati due tipi di operatori:
Operatore | Significato |
---|---|
== |
Equals |
=== |
Equivale e ha lo stesso tipo di dati |
!= |
Non è uguale |
>= |
Eguaglia o è maggiore |
<= |
Eguaglia o è minore |
> |
Maggiore |
< |
Meno |
Esempio (valido quando $x non è 5
):
if ($x != 5) { ... }
Operatore | Alternativa | Significato | Vero quando: |
---|---|---|---|
&& |
AND | e allo stesso tempo | entrambi i valori sono veri |
OR o almeno uno dei valori è vero. | |||
XOR | OR esclusivo | almeno uno dei due è vero o falso, ma mai tutti e due. | |
! |
non lo fa | negazione di un'espressione | vero quando falso e viceversa |
() |
non | negazione dell'espressione | dipende dalle circostanze |
Un esempio più complesso:
$x = 5;$y = 3;$z = 8;if ($x > 0 && !($y != 2 && $z == $x) || $z > $y) { ... }
Spesso possiamo permetterci di omettere uno dei due operatori (o addirittura entrambi), ma non dobbiamo mai dimenticare le regole di utilizzo corretto per far funzionare l'espressione risultante.
In generale, quando si testa un'espressione senza operatore, si verifica se il suo valore è TRUE
o non vuoto (ad esempio, se contiene un numero non nullo, una stringa non vuota, ...).
Esempi:
$x = 5;$y = 3;$z = 8;if ($x) { ... } // passa perché $x non è vuotoif ($x && $y) { ... } // passa perché $x e $y non sono vuotiif (!$x) { ... } // fallisce perché VERO è negatoif (isset($z)) { ... } // passa perché la variabile $z esiste
Ma possono verificarsi situazioni difficili, soprattutto quando:
se ($x)
e la variabile $x
contiene zero (0
), allora la condizione non è soddisfatta.$x
contiene la stringa 0
(il numero zero), perché trabocca a zero e quindi l'espressione non è vera.Vi consiglio una soluzione semplice ed efficace: chiedere il numero di caratteri che vengono restituiti. Se la stringa è vuota (o la variabile non esiste), vengono restituiti zero caratteri e la condizione non è soddisfatta. Un semplice esempio:
$x = '0';if ($x) { ... } // la condizione non si applica normalmenteif (strlen($x)) { ... } // la condizione è valida perché $x contiene 1 carattere
Successivamente, possiamo verificare l'esistenza di una variabile utilizzando la funzione isset()
.
Scoprire che le corde sono identiche è facile:
$a = 'Gatto';$b = 'gatto';if ($a === $b) {// Se le stringhe sono uguali} else {// Se le stringhe sono diverse}
È importante tenere sotto controllo i tipi di dati, nel caso in cui una voce possa essere equivalente a un'altra.
Ad esempio, la stringa vuota $a = '';
è diversa dalla stringa NULL
: $b = NULL;
. Questa distinzione è necessaria, ad esempio, per i database, dove esiste una differenza tra un valore inesistente e uno vuoto.
$a = '';$b = null;if ($a == $b) {// Sarà valutato come VERO perché// il tipo di dati viene convertito.}if ($a === $b) {// Esegue una validazione molto più rigorosa// e non passerà perché si tratta di un diverso// contenuto e un tipo di dati diverso, quindi// questo codice non verrà mai eseguito.}
È anche una buona idea ignorare i caratteri bianchi (invisibili) come spazi, tabulazioni e interruzioni di riga quando si confrontano le stringhe. È utile, ad esempio, quando si inserisce una password e la si passa a una funzione di hashing:
$password = '81dc9bdb52d04dc20036dbd8313ed055'; // 1234$userPassword = '1234';if (md5(trim($userPassword)) === $password) {// La funzione trim() elimina automaticamente gli spazi.}
A volte può accadere che il valore non esista (non è né TRUE
né FALSE
), ma si tratta principalmente di un valore ottenuto dal database (per esempio, si chiede una colonna che non esiste); in questo caso verrà restituito il tipo di dato NULL
.
In generale, NULL
viene valutato come FALSE
, cioè la condizione non è applicabile. Tuttavia, questo comportamento non è sempre conveniente, poiché un valore inesistente non significa necessariamente che non esista un record.
Esempio dalla pratica: Abbiamo un profilo utente e interroghiamo la pagina web dell'utente. Non tutti gli utenti devono avere una pagina web, quindi in questo caso viene restituito
NULL
, ma l'utente esiste ancora. Quindi, in questo caso, dovremmo usare la funzioneisset()
per verificare la (non) esistenza della variabile e non fare una conclusione basata su un valore specifico.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | it