Manual do PHP
Anterior | Capítulo 6. Tipos | Próxima

# Manipulação de tipos

O PHP não requer (ou suporta) a definição de tipo explicita na declaração de variáveis: o tipo de uma variável é determinado pelo contexto em que a variável é utilizada. Isto significa que, se você assimila um valor string para a variável `$var`, `$var` se torna uma string. Se você então assimila um valor inteiro para `$var`, ela se torna um inteiro.

Um exemplo da conversão automática do PHP é o operador de adição '+'. Se qualquer um dos operadores for float, então todos os operadores são avaliados como floats, e o resultado será um float. De outra forma, se os operadores forem interpretados como inteiros então o resultado será um inteiro. Note que isso NÃO muda os tipos dos operadores: apenas muda em como esses operadores são avaliados.

`<?php $foo = "0"; // $foo eh string (ASCII 48) $foo += 2; // $foo eh agora um interio (2) $foo = $foo + 1.3; // $foo eh agora um float (3.3) $foo = 5 + "10 pequenos porcos"; // $foo eh inteiro (15) $foo = 5 + "10 minúsculos porcos"; // $foo eh inteiro (15) ?>`

Se os últimos dois exemplos lhe parecerem estranhos, veja Conversão de strings para números.

Se você deseja forçar uma variável para ser avaliada como um certo tipo, veja a seção Moldando o tipo (casting). Se você deseja mudar o tipo de uma variável, veja settype().

Se quiser testar qualquer um dos exemplo desta seção, você pode usar a função var_dump().

> Nota: O comportamento de uma conversão automática para array é atualmente indefinida.

> `<?php $a = "1"; // $a é uma string $a[0] = "f"; // E com relação aos índices da string? O que acontece? ?>`

> Desde que o PHP (por razões históricas) suporta indexação de strings através de offsets utilizando a mesma sintaxe da indexação de arrays, o exemplo acima nos deixa um problema: $a se tornou um array sendo o primeiro elemento "f", ou será que "f" se tornou o primeiro caracter da string $a ?

> As versões atuais do PHP interpretam a segunda assimilacao como identificação de deslocamento na string, então $a se torna "f", o resultado desta conversão automática entretanto pode ser considerada indefinida. O PHP 4 introduziu a nova sintaxe de chaves para acessar caracteres na string. Utilize esta sintaxe em vez do exemplo apresentado acima:

> `<?php $a = "abc"; // $a eh uma string $a{1} = "f"; // $a eh agora "afc" ?>`

> Veja a seção entitulada Acessando caracteres da string para mais informações.

## Moldando Tipos - Type Casting

A moldagem de tipos no PHP funciona como no C: o nome de um tipo desejado é escrito entre parênteses antes da variável em que se deseja a moldagem.

`<?php $foo = 10; // $foo eh um inteiro $bar = (boolean) $foo; // $bar eh um booleano ?>`

As moldagens permitidas são:

- (int), (integer) - molde para inteiro

- (bool), (boolean) - molde para booleano

- (float), (double), (real) - molde para número de ponto flutuante

- (string) - molde para string

- (array) - molde para array

- (object) - molde para objeto

Note que tabulações e espaços são permitidos dentro dos parênteses, então o seguinte são funcionalmente equivalentes:

`<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>`

> Nota: Em vez de moldar uma variável para string, você também pode englobar a variável entre aspas duplas.

> `<?php $foo = 10; // $foo eh um interio $str = "$foo"; // $str eh uma string $fst = (string) $foo; // $fst tambem eh uma string // Isto imprimirah "eles são o mesmo" if ($fst === $str) { echo "eles são o mesmo"; } ?>`

Pode não ser tão óbvio o que exatamente ocorre quando se molda entre certos tipos. Para mais informações, veja essas seções:

- Convertendo para booleano

- Convertendo para inteiro

- Convertendo para float

- Convertendo para string

- Convertendo para array

- Convertendo para object

- Convertendo para resource

- Tabela de comparação entre tipos

Anterior | Principal | Próxima
Pseudo-tipos utilizados nesta documentação | Acima | Variáveis