Les opérateurs de comparaison, comme leur nom l'indique,
vous permettent de comparer deux valeurs. Vous devriez également être intéressé
par les tables de comparaisons de types
car ils montrent des exemples de beaucoup de types de comparaisons.
Tableau 15-4. Opérateurs de comparaison
| Exemple | Nom | Résultat |
|---|
| $a == $b | Egal | TRUE si $a est égal à
$b. |
| $a === $b | Identique |
TRUE si $a est égal à $b et qu'ils sont
de même type (introduit en PHP 4).
|
| $a != $b | Différent | TRUE si $a est différent de
$b. |
| $a <> $b | Différent | TRUE si $a est différent de
$b. |
| $a !== $b | Différent |
TRUE si $a est différent de $b
ou bien qu'ils ne sont pas du même type. (introduit en PHP 4)
|
| $a < $b | Plus petit que | TRUE si $a est strictement plus petit que
$b. |
| $a > $b | Plus grand | TRUE si $a est strictement plus grand que
$b. |
| $a <= $b | Inférieur ou égal | TRUE si $a est plus petit ou égal à
$b. |
| $a >= $b | Supérieur ou égal | TRUE si $a est plus grand ou égal à
$b. |
Si vous comparez un entier avec une chaîne, la chaîne est
convertie en un nombre.
Si vous comparez deux chaînes numériques, elles seront comparées en tant
qu'entiers. Ces règles s'appliquent aussi à l'instruction
switch.
Si les types des opérandes diffèrent, la comparaison est faite en suivant
la table suivante (dans l'ordre).
Tableau 15-5. Comparaison avec différents types
| Type de l'opérande 1 | Type de l'opérande 2 | Résultat |
|---|
| null ou chaîne de caractères | string | Convertit NULL en "", comparaison numérique ou lexicale |
| booléen ou null | N'importe quoi | Convertit en booléen, FALSE < TRUE |
| objet | objet | Les classes internes peuvent définir leur propre comparaison, différentes
classes ne sont pas comparables, les mêmes classes - la comparaison des propriétés
se fait de la même façon que pour les tableaux (PHP 4), PHP 5 a son propre
comportement |
| chaîne de caractères, ressource ou nombre | chaîne de caractères, ressource ou nombre | Transforme les chaînes de caractères et les ressources en nombresTranslate strings and resources to numbers, maths habituelles |
| tableaux | tableaux | Le tableau avec le moins de membres est plus petit, si la clé de l'opérande 1
n'est pas trouvée dans l'opérande 2, alors les tableaux ne sont pas comparables, sinon -
comparaison valeur par valeur (voir l'exemple suivant) |
| tableau | N'importe quoi | Le tableau est toujours plus grand |
| objet | N'importe quoi | L'objet est toujours plus grand |
Exemple 15-5. Transcription des comparaisons standarts des tableaux
<?php // Les tableaux sont comparés comme ceci avec les opérateurs standarts de comparaison 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; // incomparable } elseif ($val < $op2[$key]) { return -1; } elseif ($val > $op2[$key]) { return 1; } } return 0; // $op1 == $op2 } ?>
|
|
Voir aussi
strcasecmp(),
strcmp()
les opérateurs de tableaux,
et le chapitre sur les types.
Un autre opérateur conditionnel est l'opérateur
ternaire (":?").
Exemple 15-6. Assignement d'une valeur par défaut
<?php // Exemple d'utilisation pour l'opérateur ternaire $action = (empty($_POST['action'])) ? 'défaut' : $_POST['action'];
// La ligne ci-dessus est identique à la condition suivante : if (empty($_POST['action'])) { $action = 'défaut'; } else { $action = $_POST['action']; }
?>
|
|
L'expression
(expr1) ? (expr2) : (expr3)
est évaluée à
expr2 si
expr1 est évalué à
TRUE, et
expr3 si
expr1 est évalué à
FALSE.
Note :
Notez que l'opérateur ternaire est une instruction, et il n'est pas
évalué en tant que variable, mais en tant que résultat de l'instruction.
Il est important de savoir si vous voulez retourner une variable
par référence. L'instruction return $var == 42 ? $a : $b;
dans une fonction retournée par référencene fonctionnera donc pas et une
alerte est émise dans les versions supérieures de PHP.