Les opérateurs de comparaison, comme leur nom l'indique,
vous permettent de comparer deux valeurs. Vous devriez également être
intéressés 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.
Les classes internes peuvent définir leur propre méthode de
comparaison; différentes classes ne sont pas comparables; entre objets
de même classe, la comparaison 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 nombres
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 la comparaison se fait 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 standards 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 } ?>
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'])) ? 'default' : $_POST['action'];
// La ligne ci-dessus est identique à la condition suivante : if (empty($_POST['action'])) { $action = 'default'; } 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érence ne fonctionnera donc pas et une
alerte est émise dans les versions supérieures de PHP.
Note :
Il est recommandé de ne pas "empiler" les expressions ternaires.
Le comportement de PHP lors de l'utilisation de plus d'un opérateur
ternaire dans une seule instruction n'est pas évident :
Exemple 15-7. Comportement de PHP
<?php // A première vue, ce qui suit devrait retourner 'true' echo (true?'true':false?'t':'f');
// cependant, l'expression ci-dessus retournera 't' // car l'expression ternaire est évaluée de gauche à droite
// l'expression suivante est une version plus évidente du même code echo ((true ? 'true' : 'false') ? 't' : 'f');
// ici, vous pouvez voir que la première expression est évaluée à 'true', // ce qui fait qu'elle est évaluée à (bool)true, ce qui retourne la branche // 'vraie' de la seconde expression ternaire. ?>