Fácil PHP

Comparação estrita vs flexível

Enunciado

Crie um script PHP que defina duas variáveis: $x = 10 e $y = '10'. Use var_dump para mostrar o resultado de $x == $y e $x === $y. Depois, use if para verificar se $x === $y e imprimir "Tipos diferentes" caso sejam diferentes, ou "Tipos iguais" caso contrário.

Requisitos

  • Declarar $x como inteiro 10 e $y como string '10'.
  • Usar var_dump para exibir o resultado de == e ===.
  • Usar if com === para imprimir a mensagem correta.

Código inicial

<?php
// Complete o código abaixo
$x = 10;
$y = '10';

// Mostre o resultado de == e ===

// Verifique se são estritamente iguais
?>

Saída esperada

bool(true)
bool(false)
Tipos diferentes
Ver dica

Lembre-se: == compara apenas valores, === compara valores e tipos. Use var_dump para ver o tipo booleano.

Mostrar solução
<?php
$x = 10;          // inteiro
$y = '10';        // string

// Comparação flexível (valores iguais após conversão)
var_dump($x == $y);  // bool(true)

// Comparação estrita (tipos diferentes)
var_dump($x === $y); // bool(false)

// Verificação com if
if ($x === $y) {
    echo "Tipos iguais\n";
} else {
    echo "Tipos diferentes\n";
}
?>

Passo a passo

  1. Definimos $x como o inteiro 10 e $y como a string '10'.
  2. var_dump($x == $y) converte a string para número e compara os valores, resultando em true.
  3. var_dump($x === $y) compara valor e tipo; como um é int e o outro é string, resulta em false.
  4. O if usa === para verificar igualdade estrita; como são diferentes, imprime "Tipos diferentes".
  5. A saída é exibida na ordem: primeiro os dois var_dump, depois a mensagem do if.

Por que funciona

O operador == realiza conversão de tipos antes de comparar, então 10 == '10' é verdadeiro. Já === não converte, exigindo que tipo e valor sejam idênticos. Isso evita bugs sutis quando se espera um tipo específico.

Erros comuns

  • Usar = em vez de == ou === dentro do if: if ($x = $y) atribui e sempre é verdadeiro (a menos que o valor seja falso).
  • Esquecer o ; no final das linhas, causando erro de sintaxe.
  • Confundir a saída de var_dump: bool(true) e bool(false) são exibidos, não true/false.

Outra forma de resolver

Poderia usar gettype() para comparar tipos manualmente, mas === é mais direto.

Saída esperada

bool(true)
bool(false)
Tipos diferentes