# Comparaison de types en PHP

La table suivante résume les différents comportements de PHP avec les types et opérateurs de comparaison, stricte ou large. Cette table est aussi reliée au transtypage. Elle a été inspirée par différents commentaires d'utilisateurs, et par le travail fait chez » BlueShoes.

Avant d'utiliser ces tables, il est important de comprendre les types et leur signification. Par exemple, `"42"` est une chaîne de caractères, alors que `42` est un entier. `false` est bool alors que `"false"` est une chaîne de caractères.

> Note:

> Les formulaires HTML ne transmettent pas d'entiers, de nombres à virgule flottante ou de booléens : ils transmettent des chaînes de caractères. Pour savoir si une chaîne est numérique, utiliser is_numeric().

> Note:

> La ligne `if ($x)` génère une erreur de niveau `E_NOTICE` lorsque $x est indéfini. Alternativement, il est préférable d'utiliser les fonctions empty() ou isset(), ou encore, d'initialiser toutes les variables.

> Note:

> Des opérations numériques peuvent donner une valeur représentée par la constante `NAN`. Toutes les comparaisons larges ou strictes de cette valeur avec une autre valeur, y compris cette même valeur, à l'exception de `true`, auront comme résultat `false`. (c.-à-d. `NAN != NAN` et `NAN !== NAN`) Exemples d'opérations qui produisent la valeur `NAN` : `sqrt(-1)`, `asin(2)`, et `acosh(0)`.

Comparaisons de $x avec des fonctions PHP
Expression | gettype() | empty() | is_null() | isset() | bool : `if($x)`
--- | --- | --- | --- | --- | ---
`$x = "";` | chaîne de caractères | `true` | `false` | `true` | `false`
`$x = null;` | NULL | `true` | `true` | `false` | `false`
`var $x;` | NULL | `true` | `true` | `false` | `false`
$x est indéfini | NULL | `true` | `true` | `false` | `false`
`$x = [];` | array | `true` | `false` | `true` | `false`
`$x = ['a', 'b'];` | array | `false` | `false` | `true` | `true`
`$x = false;` | bool | `true` | `false` | `true` | `false`
`$x = true;` | bool | `false` | `false` | `true` | `true`
`$x = 1;` | entier | `false` | `false` | `true` | `true`
`$x = 42;` | entier | `false` | `false` | `true` | `true`
`$x = 0;` | entier | `true` | `false` | `true` | `false`
`$x = -1;` | entier | `false` | `false` | `true` | `true`
`$x = "1";` | chaîne de caractères | `false` | `false` | `true` | `true`
`$x = "0";` | chaîne de caractères | `true` | `false` | `true` | `false`
`$x = "-1";` | chaîne de caractères | `false` | `false` | `true` | `true`
`$x = "php";` | chaîne de caractères | `false` | `false` | `true` | `true`
`$x = "true";` | chaîne de caractères | `false` | `false` | `true` | `true`
`$x = "false";` | string | `false` | `false` | `true` | `true`

Comparaison large avec `==`
| `true` | `false` | `1` | `0` | `-1` | `"1"` | `"0"` | `"-1"` | `null` | `[]` | `"php"` | `""`
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
`true` | `true` | `false` | `true` | `false` | `true` | `true` | `false` | `true` | `false` | `false` | `true` | `false`
`false` | `false` | `true` | `false` | `true` | `false` | `false` | `true` | `false` | `true` | `true` | `false` | `true`
`1` | `true` | `false` | `true` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false`
`0` | `false` | `true` | `false` | `true` | `false` | `false` | `true` | `false` | `true` | `false` | `false`* | `false`*
`-1` | `true` | `false` | `false` | `false` | `true` | `false` | `false` | `true` | `false` | `false` | `false` | `false`
`"1"` | `true` | `false` | `true` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false`
`"0"` | `false` | `true` | `false` | `true` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false`
`"-1"` | `true` | `false` | `false` | `false` | `true` | `false` | `false` | `true` | `false` | `false` | `false` | `false`
`null` | `false` | `true` | `false` | `true` | `false` | `false` | `false` | `false` | `true` | `true` | `false` | `true`
`[]` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `true` | `false` | `false`
`"php"` | `true` | `false` | `false` | `false`* | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false`
`""` | `false` | `true` | `false` | `false`* | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `true`

* `true` antérieur à PHP 8.0.0.

Comparaison stricte avec `===`
| `true` | `false` | `1` | `0` | `-1` | `"1"` | `"0"` | `"-1"` | `null` | `[]` | `"php"` | `""`
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
`true` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false`
`false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false`
`1` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false`
`0` | `false` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false`
`-1` | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false` | `false`
`"1"` | `false` | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false` | `false`
`"0"` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `false` | `false` | `false`
`"-1"` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `false` | `false`
`null` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false` | `false` | `false`
`[]` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false` | `false`
`"php"` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `true` | `false`
`""` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `false` | `true`

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open