PHP é uma linguagem de programação vagamente tipada, ou seja, não nos obriga a declararmos os tipos de variáveis.
O PHP deduz o tipo pelo contexto em que usamos a variável.
Exemplos:
$nome = 'maria'; //php deduz ser uma string
$idade = 32; //deduz ser um inteiro
$masculino = false; //deduz ser um booleano
$peso = 50.5; //deduz ser um float
$filhos = [joao,ana]; //deduz ser um array
Podemos declarar uma variável duas vezes e sendo de tipo diferente
$peso = 55.5; //deduz ser um float
$peso = 57; //agora deduzirá ser um inteiro
$peso = "cinquenta e oito"; // agora é uma string
Não vimos ainda sobre estruturas condicionais em PHP, mas aqui vale a pena vermos para ilustrarmos o type juggling que o PHP faz. Estrutura condicionais, como o nome sugere, são ações que ocorrem a depender se uma condição é verdadeira(true) ou falsa(false). Vamos impor uma condição que exiba na tela a frase “igual a 20” somente se(if) a variável conter o número 20 dentro dela. Para comparar usamos o sinal de comparação ==
<?php
$valor = 20;
if ($valor == '20' ) { echo "valor igual a 20"; };
// o resultado será verdadeiro(true) e exibirá na tela: "valor igual a 20"
?>
Veja acima que a variável $valor recebe o inteiro 20 mas dentro da condição é comparado com ’20’ que é uma string. Por causa do type juggling, PHP converte a string ’20’ em um inteiro (20) e a compara com a variável $valor.
O resultado acima é verdadeiro por conta do type juggling feito pelo PHP.
Type Juggling também funciona em operações aritméticas para variáveis de diferentes tipos:
<?php
$parcela1 = 30;
$parcela2 = "40";
$total = $parcela1 + $parcela2; //somando um inteiro com uma string
echo $total //o resultado é 70
?>
Acima, para calcular a soma, o PHP primeiro converte o valor da variável $parcela2 para um integer. O resultado é um integer.
Conclusão
Aqui vimos sobre Type Juggling que é um tipo de malabarismo que PHP faz com os tipos de dados para contornar erros e tentar entender a intenção do usuário.