# Tabela de comparações de tipos do PHP

As seguintes tabelas demonstram o comportamento dos tipos e operadores de comparação no PHP, tanto para comparações aproximadas ou exatas. Este complemento é também relacionado com a seção do manual sobre type juggling. A inspiração vem dos comentários de vários usuários e do trabalho feito pela » BlueShoes.

Antes de utilizar essas tabelas, é importante entender os tipos e seus significados. Por exemplo, `"42"` é uma string enquanto `42` é um int. `false` é um bool enquanto `"false"` é uma string.

> Nota:

> Formulários HTML não passam inteiros, floats ou booleanos; eles passam strings. Para saber se uma string é do tipo númerico, você pode usar a função is_numeric().

> Nota:

> Usar apenas `if ($x)` quando $x estiver indefinido irá gerar um erro do nível `E_NOTICE`. Em vez disso, considere usar empty() ou isset() ou ainda inicialize suas variáveis.

> Nota:

> Algumas operações numéricas podem resultar em um valor representado pela constante `NAN`. Quaisquer comparações exatas ou aproximadas deste valor contra qualquer outro valor, incluindo ele mesmo, com exceção de `true`, terão como resultado `false`. (por exemplo `NAN != NAN` e `NAN !== NAN`) Exemplos de operações que geram `NAN` são `sqrt(-1)`, `asin(2)`, e `acosh(0)`.

Comparações de $x com funções PHP
Expressão | gettype() | empty() | is_null() | isset() | bool : `if($x)`
--- | --- | --- | --- | --- | ---
`$x = "";` | string | `true` | `false` | `true` | `false`
`$x = null;` | NULL | `true` | `true` | `false` | `false`
`var $x;` | NULL | `true` | `true` | `false` | `false`
$x está indefinido | 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;` | int | `false` | `false` | `true` | `true`
`$x = 42;` | int | `false` | `false` | `true` | `true`
`$x = 0;` | int | `true` | `false` | `true` | `false`
`$x = -1;` | int | `false` | `false` | `true` | `true`
`$x = "1";` | string | `false` | `false` | `true` | `true`
`$x = "0";` | string | `true` | `false` | `true` | `false`
`$x = "-1";` | string | `false` | `false` | `true` | `true`
`$x = "php";` | string | `false` | `false` | `true` | `true`
`$x = "true";` | string | `false` | `false` | `true` | `true`
`$x = "false";` | string | `false` | `false` | `true` | `true`

Comparações aproximadas com `==`
| `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` anteriormente ao PHP 8.0.0.

Comparações exatas com `===`
| `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