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 de conversão automática do PHP é o operador de multiplicaçã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 = "1"; // $foo é string (ASCII 49)
$foo *= 2; // $foo é agora um inteiro (2)
$foo = $foo * 1.3; // $foo é agora um float (2.6)
$foo = 5 * "10 pequenos porcos"; // $foo é um inteiro (50)
$foo = 5 * "10 minúsculos porcos"; // $foo é um inteiro (50)
?>
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.
O PHP também 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.
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:
(binary) e o prefixo b foram adicionados no PHP 5.2.1. Note que (binary) é essencialmente o mesmo que (string), mas não deve ser invocado
Conversão (unset) está depreciada a partir do PHP 7.2.0. Note que (unset) é o mesmo que atribuir NULL a variável ou chamada. Conversão (unset) será removida a partir do PHP 8.0.0.
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: