Opérateurs de comparaison

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

ExempleNomRésultat
$a == $bEgalTRUE si $a est égal à $b.
$a === $bIdentique TRUE si $a est égal à $b et qu'ils sont de même type (introduit en PHP 4).
$a != $bDifférentTRUE si $a est différent de $b.
$a <> $bDifférentTRUE si $a est différent de $b.
$a !== $bDiffé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 < $bPlus petit queTRUE si $a est strictement plus petit que $b.
$a > $bPlus grandTRUE si $a est strictement plus grand que $b.
$a <= $bInférieur ou égalTRUE si $a est plus petit ou égal à $b.
$a >= $bSupérieur ou égalTRUE 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.

<?php
var_dump
(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true

switch ("a") {
case
0:
    echo
"0";
    break;
case
"a": // jamais évalué parce que "a" est déjà trouvé avec 0
    
echo "a";
    break;
}
?>

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 1Type de l'opérande 2Résultat
null ou chaîne de caractèresstringConvertit NULL en "", comparaison numérique ou lexicale
booléen ou nullN'importe quoiConvertit en booléen, FALSE < TRUE
objetobjetLes 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 nombrechaîne de caractères, ressource ou nombreTransforme les chaînes de caractères et les ressources en nombresTranslate strings and resources to numbers, maths habituelles
tableauxtableauxLe 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)
tableauN'importe quoiLe tableau est toujours plus grand
objetN'importe quoiL'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.

L'opérateur ternaire

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.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:59