Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Type Juggling / Strict_types

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!

1 resposta
solução!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software