Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Israel Elias

Operadores de Comparação

Recommended Posts

Galera tudo beleza

 

Qual real diferença desses operadores de comparação logo abaixo:

 

=== para esse ==

!== para esse !=

 

 

sempre usar ( === !== ) em vez de ( == != ) na comparações, ou há exceções?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre há exceções de uso.

Os operadores == ou != testam apenas os valores.

Comparações como:

1 == 1;// true
1 == '1';// true
10 == '10';// true
false == 0;// true
true == 1;// true
true != 'true';//false
1 != '1';// false


Já === ou !== testam o valor e o tipo. Comparações como:

1 === 1;// true
1 === '1';// false
10 === '10';// false
false === 0;// false
true === 1;// false
true !== 'true';// true
1 !== '1';// true

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use === sempre que os valores tiverem que ser iguais e de mesmo tipo...

Em qual situação rotineira, terei que saber se os valores são iguais e de mesmo tipo?

 

Já que esse comparador === faz o trabalho de verificar se os valores são iguais e de mesmo tipo, por que não sempre usar ele, em vez desse == que só verifica somente se o valor é igual?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que esse comparador === faz o trabalho de verificar se os valores são iguais e de mesmo tipo, por que não sempre usar ele, em vez desse == que só verifica somente se o valor é igual?

 

Porque, por exemplo, array(), 0, "" e null podem ser comparadas como false em qualquer um desses casos.

Exemplo,

um registro no banco de dados retorna (int)0 resultados:

if( $dados == false )

{

// isso funciona

}

 

 

Se você fizesse com ===, cairia no ELSE e não no IF a sua condição.

 

 

interessante que === pode ser usado para comparar se os arrays tem os mesmos valores;

 

 

var_dump(array('isso', 'isso', 'aquiloutro') === array('isso', 'isso', 'aquiloutro')); // bool(true)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algo que acontece, e muito, é o uso de strpos para identificar parte de uma palavra em uma string.

Lendo o manual fica fácil entender o comportamento da função:

Find the position of the first occurrence of a substring in a string. [...] Returns the position of where the needle exists relative to the beginning of the haystack string. [...] Returns FALSE if the needle was not found.

Encontra e retorna a posição de needle. Caso não encontrar, retorna false.

Como a primeira posição é zero, e zero é diferente de false, eu criei a lógica para retornar se uma palavra for encontrada na string.

var_dump(strpos("Hello, World!" , "Hello") >= 0);//Retorna a posição 0 -> true

Entretanto, quando retorna false, o cast type retorna o resultado como true:

var_dump(strpos("Hello, World!" , "Something") >= 0);//Something não existe na string, retorna false, resultado do var_dump é true

Agora sabemos que dessa maneira não funciona. Vamos verifiacar o que e diferente de false então:

var_dump(strpos("Hello, World!" , "World") != false);//Retorna a posição 7 -> true

var_dump(strpos("Hello, World!" , "Something") != false);//Retorna false -> false

var_dump(strpos("Hello, World!" , "Hello") != false);//Retorna a posição 0 -> false

Os dois primeiros testes, funcionam, retornando, respectivamente, true e false. Entretanto, o terceiro teste, deveria retornar true, mas está retornando false.

Na análise, a posição retornada é 0. Utilizando o cast type do PHP, 0 é igual a false, logo, essa abordagem também não funciona.

Para evitar esse problema, deve-se, portanto, verificar, além do valor, o tipo retornado.

var_dump(strpos("Hello, World!" , "World") !== false);//Retorna a posição 7 -> true

var_dump(strpos("Hello, World!" , "Something") !== false);//Retorna false -> false

var_dump(strpos("Hello, World!" , "Hello") !== false);//Retorna a posição 0 -> true

Enfim, obtivemos os valores corretamente retornados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resumidamente seria.

 

!== e === seria comparação idêntica até o tipo usado.

!= e == comparação se são iguais não verificando o tipo utilizado.

 

'1' == true , neste caso seria verdade

'1' === true, neste caso seria falso, como informado acima, os valores ou neste caso a lógica confere, mas a maneira de comparação foi para verificar se o valor e tipo são iguais, neste caso, seria falso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.