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�s par les tables de comparaisons de types, car ils montrent des exemples de beaucoup de types de comparaisons.

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.

<?php
var_dump
(== "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 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;
}
?>

Pour les diff�rents types, la comparaison est faite en suivant la table suivante (dans l'ordre).

Comparaison avec plusieurs 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 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 #1 Transcription des comparaisons standards des tableaux

<?php
// Les tableaux sont compar�s comme ceci avec les op�rateurs standards 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 #2 Assignation 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�e � TRUE, et expr3 si expr1 est �valu�e � FALSE.

Depuis PHP 5.3, il est possible d'omettre la partie centrale de l'op�rateur ternaire. L'expression expr1 ?: expr3 retourne expr1 si expr1 vaut TRUE, est expr3 sinon.

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 #3 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.
?>