Manipulação de tipos

O PHP não obriga (ou suporta) a definição de tipo explícita na declaração de variáveis: o tipo de uma variável é determinado pelo contexto em que a variável é utilizada. Isto significa que, atribuir um valor string a variável $var, fará $var se tornar uma string. Se um valor integer for atribuído a $var, ela se torna um integer.

Um exemplo da conversão automática do PHP é o operador de adição '+'. Se qualquer um dos operandos for float, todos os operadores serão avaliados como float, e o resultado será um float. De outra forma, se os operadores forem interpretados como integers, o resultado será um integer. Note que isso não muda os tipos dos operadores: apenas muda como esses operadores são avaliados e qual o tipo da expressão.

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

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

Para forçar uma variável ser avaliada como um certo tipo, veja a seção Conversão de tipo. Se desejar mudar o tipo de uma variável, veja a função settype().

Para 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.

Também, pelo PHP suporta indexação em strings via índice usando a mesma sintaxe de array, o seguinte exemplo é válido para todas versões do PHP:

<?php
$a    
'car'// $a é uma string
$a[0] = 'b';   // $a é ainda uma string
echo $a;       // bar
?>

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

Conversão de Tipos

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

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

As conversões permitidas são:

  • (int), (integer) - molde para inteiro
  • (bool), (boolean) - converte para booleano
  • (float), (double), (real) - converte para número de ponto flutuante
  • (string) - converte para string
  • (array) - converte para array
  • (object) - converte para objeto
  • (unset) - converte para NULL (PHP 5)

(binary) e o prefixo b foram adicionados no PHP 5.2.1

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;
?>

Convertendo strings literais e variáveis para strings binárias:

<?php
$binary 
= (binary)$string;
$binary b"binary string";
?>

Nota:

Em vez de converter uma variável para string, pode-se também englobar a variável entre aspas duplas.

<?php
$foo 
10;            // $foo é um interio
$str "$foo";        // $str é uma string
$fst = (string) $foo// $fst tambem é 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 ocorre exatamente quando se converte entre certos tipos. Para mais informações, veja essas seções: