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
$xcomo inteiro 10 e$ycomo string '10'. - Usar
var_dumppara exibir o resultado de==e===. - Usar
ifcom===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
- Definimos
$xcomo o inteiro10e$ycomo a string'10'. var_dump($x == $y)converte a string para número e compara os valores, resultando emtrue.var_dump($x === $y)compara valor e tipo; como um éinte o outro éstring, resulta emfalse.- O
ifusa===para verificar igualdade estrita; como são diferentes, imprime "Tipos diferentes". - A saída é exibida na ordem: primeiro os dois
var_dump, depois a mensagem doif.
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 doif: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)ebool(false)são exibidos, nãotrue/false.
Outra forma de resolver
Poderia usar gettype() para comparar tipos manualmente, mas === é mais direto.
Saída esperada
bool(true)
bool(false)
Tipos diferentes