 |
Gli operatori di confronto, come suggerisce il loro nome, permettono di confrontare
due valori. Può essere interessante vedere la
tabella di raffronto dei tipi,
dato che mostra esempi di vari confronti tra i tipi di variabili.
Tabella 15-4. Operatori di confronto Esempio | Nome | Risultato |
---|
$a == $b | Uguale | TRUE se $a è uguale a $b. | $a === $b | Identico |
TRUE se $a è uguale a $b, ed essi sono dello stesso
tipo. (Dal PHP 4)
| $a != $b | Diversi | TRUE se $a è diverso da $b. | $a <> $b | Diversi | TRUE se $a è diverso da $b. | $a !== $b | Non identici |
TRUE se $a è diverso da $b, o se essi non sono dello stesso
tipo. (Dal PHP 4)
| $a < $b | Minore | TRUE se $a è strettamente minore di $b. | $a > $b | Maggiore | TRUE se $a è strettamente maggiore di $b. | $a <= $b | Minore o uguale | TRUE se $a è minore o uguale a $b. | $a >= $b | Maggiore o uguale | TRUE se $a è maggiore o uguale a $b. |
Se si confronta interi con stringhe, la stringa viene
convertita in numero.
Se si confronta due stringhe numeriche, queste vengono confrontate come interi. Queste
regole valgono anche per l'istruzione
switch.
Se i tipi di operarandi utilizzati differiscono, il confronto viene svolto
nell'ordine indicato della seguente tabella.
Tabella 15-5. Confronti con differenti tipi Tipo dell'operando 1 | Tipo dell'operando 2 | Risultato |
---|
null oppure string | string | Si converte NULL in "", confronto numerico o lessicale | bool oppure null | qualsiasi | Convertito in bool, FALSE < TRUE | object | object | Le classi predefinite possono avere la propria funzione di confronto, differenti classi
non sono confrontabili, classi uguali - hanno le medesime proprietà di confronto delle
matrici (PHP 4), pre il PHP 5 vedere qui per maggiori spiegazioni.
| string, resource oppure number | string, resource oppure number | Stringhe e risorse sono converti in numeri, confronto matematico | array | array | La matrice con meno membri è più piccola, se la chiave dell'operando 1 non si
trova nell'operando 2 allora le matrici non si possono confrontare, in altri casi
il confronto avviene valore per valore (vedere l'esempio seguente) | array | qualsiasi | array è sempre più grande | object | qualsiasi | object è sempre più grande |
Esempio 15-2. Trascrizione del confronto standard tra matrici
<?php // Le matrici vengono confrontate come illustrato in questa funzione function standard_array_compare($op1, $op2) { if (count($op1) < count($op2)) { return -1; // $op1 < $op2 } elseif (count($op1) > count($op2)) { return 1; // $op1 > $op2 } foreach ($op1 as $key => $val) { if (!array_key_exists($key, $op2)) { return null; // uncomparable } elseif ($val < $op2[$key]) { return -1; } elseif ($val > $op2[$key]) { return 1; } } return 0; // $op1 == $op2 } ?>
|
|
Vedere anche strcasecmp(),
strcmp(),
Array operators,
e la sezione del manuale su
Types.
Un'altro operatore condizionale è l'operatore ternario "?:".
Esempio 15-3. Assegnazione di un valore di default
<?php // Esempio di utilizzo dell'operatore ternario $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// La riga precedente è simile a if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; }
?>
|
|
L'espressione (espressione1) ? (espressione2) : (espressione3)
vale espressione2 se
espressione1 è TRUE, e
espressione3 se
espressione1 è FALSE.
Nota:
Si noti che l'operatore ternario è un'istruzione, e non viene valutato
come variabile, ma come risultato di un'istruzione. Questo
è importante da sapere nel caso si desideri restituire una variabile per riferimento.
La riga return $var == 42 ? $a : $b; in una funzione
che restituisce per riferimento non funzionerà e, nelle ultime versioni di PHP,
genererà un warning.
|  |