Olá pessoal. Qual é a diferença entre o type juggling e strict_types atribuído o número 1? Na aula fiquei em dúvida sobre eles, não sei se eles são semelhantes. Obrigado pela ajuda!
Olá pessoal. Qual é a diferença entre o type juggling e strict_types atribuído o número 1? Na aula fiquei em dúvida sobre eles, não sei se eles são semelhantes. Obrigado pela ajuda!
Olá Leonardo,
Type Juggling
é a mudança (transformação) de tipo que o PHP tenta fazer com uma variável em algumas operações. Por exemplo em uma soma de um valor int
e um valor string
o PHP vai tentar transformar o valor string
em int
para fazer a soma:
// Somando um inteiro com uma string
$soma = 1 + "1";
echo $soma;
// Resultado
2
Já o declare(strict_types=1)
é utilizado na atividade para dizer ao PHP para considerar como um erro caso seja passado um tipo diferente do definido na função, normalmente isso gera apenas um aviso.
Exemplo:
// Pedimos um parâmetro do tipo string
function teste(string $a)
{
var_dump($a);
}
// Passamos um parâmetro do tipo int
teste(1);
Nesse caso o código vai executar sem erros, o PHP vai tentar fazer a conversão do parâmetro para string
e vai continuar executando, assim o resultado é: string(1) "1"
Exemplo 2:
declare(strict_types=1);
// Pedimos um parâmetro do tipo string
function teste(string $a)
{
var_dump($a);
}
// Passamos um parâmetro do tipo int
teste(1);
Já nesse exemplo com o strict_types
o resultado vai ser um erro, pois o declare(strict_types=1);
está dizendo ao PHP para ele ser mais estrito, mais rigoroso, e assim não aceitar que seja passado um parâmetro de tipo diferente para a função. O resultado desse código é o erro:
PHP Fatal error: Uncaught TypeError: Argument 1 passed to teste() must be of the type string, integer given