Opérateurs sur les bits
Opérateur de contrôle d'erreur
Les opérateurs
PHP Manual

## 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(0 == "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.
> ?>`

Opérateurs sur les bits
Opérateur de contrôle d'erreur
Les opérateurs
PHP Manual