2011-12-17 51 views
7

Busqué en StackOverflow y Google y no puedo encontrar la respuesta a esta pregunta:doble es igual a igual y triple en php

¿Hay que utilizar siempre la triple iguales en PHP para la validación?

Por ejemplo, tengo una variable:

$x = '1'; 

if($x == 1) // will work 
if($x === 1) // will not 

Ahora, mi punto es que si necesitamos validar campos numéricos como:

if(is_numeric($x) && $x == '1') { será el equivalente a if($x === 1)

Desde === también validar el tipo, ¿será mejor si siempre usamos el ===?

Respuesta

5

Depende por completo de la secuencia de comandos que está escribiendo, no hay una respuesta correcta para esto. Habiendo dicho eso, no hay muchas situaciones en las que aún no conozca el tipo de la variable (excepto tal vez la entrada del usuario).

Esta es la razón por la que me atengo a usar == y solo uso === cuando podría haber más de un tipo de la variable.

El == está bien la mayor parte del tiempo, no se habría inventado si no se suponía que usarlo :)

+1

“Todo depende de la secuencia de comandos que está escribiendo,” 1 – TimWolla

+0

Sé consciente de que ' "1E3" == "1000" y' ' "61529519452809720693702583126814" == "61529519452809720000000000000000"' 'ambos son true' por lo que no debería usar '==' para comparar cadenas. – ausi

+1

"no se habría inventado si no se supone que debes usarlo" - lo siento, no compre eso. :) especialmente dado cómo php inicialmente evolucionó. – Bravmech

0

Yo diría que es mejor usar siempre === y eliminar uno = en los casos que pueda justificar.

Y sí, es igual, aunque extraño. Mejor manera de escribir es if(is_numeric($x) && $x == 1)

0

si usted está esperando que la variable que estás pasando voluntad (y debe) ser un número entero de lo que debe utilizar el triple igual, si no que se debe evitar eso.

Aunque, si realmente desea utilizar === de lo que debería estar haciendo la conversión de variables para el tipo que desee a lo largo del camino, como en este ejemplo:

if ((int) $var === 1) 
{ 

    // will return true if the $var is 1 
} 
-1

Si desea una validación tan fuerte , entonces la respuesta es: sí, definitivamente use ===.

El == también hace un mismas cosas extrañas, como comparar completamente diferente cadena como iguales, sólo porque son numéricamente equivalentes. Por lo tanto, === probablemente sea una mejor herramienta para usted en la mayoría de las situaciones.

3

Depende de lo que quieras hacer.
Dado que a partir de formularios, los datos vienen como cadenas, == es útil porque puede comparar, por ejemplo, cadenas que representan números con números sin conversión de tipo adicional.

if ($_GET['amount'] == 10) { 
    //... 
} 

Así que no, no es mejor usar siempre ===.

1
if (is_numeric($x) && $x == '1') { ... 

Esto me parece redundante. ¿Por qué tenemos que verificar si $xis_numeric Y el valor '1'? Sabemos que '1' es numérico, por lo tanto, si es igual a '1', debe ser un número.


Usted podría utilizar === comparación:

Si estás bien con interpretarlo como una cadena:

if ($x === '1') { ... 

o

Si tiene que interpretar el valor como un int

if ((int) $x === 1) { ... 

o

Si no se preocupan por el tipo real:

if ($x == '1') { ... 
6

De http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

== es inútil.

‣ No es transitivo. "Foo" == TRUE, y "foo" == 0 ... pero, por supuesto, VERDADERO! = 0.

‣ == convierte a los números cuando sea posible, lo que significa que convierte a los flotadores cuando sea posible. Así que las cadenas hexagonales grandes (como, por ejemplo, contraseñas de contraseña ) pueden ocasionalmente comparar verdaderas cuando no lo son. Incluso JavaScript no hace esto.

‣ Por la misma razón, "6" == "6", "4.2" == "4.20" y "133" == "0133". Pero tenga en cuenta que 133! = 0133, porque 0133 es octal.

‣ === compara valores y escribe ... excepto con objetos, donde === solo es verdadero si ambos operandos son en realidad el mismo objeto. Para los objetos, == compara tanto el valor (de cada atributo) como el tipo, que es lo que === hace para cualquier otro tipo. Qué.

Ver http://habnab.it/php-table.html

Y http://phpsadness.com/sad/47

Y http://developers.slashdot.org/comments.pl?sid=204433&cid=16703529

Dicho esto, cuando se está absolutamente seguro de tipo no es un problema cuando se está creando expresiones simples, funciona bastante bien == en mi experiencia. Solo estate vigilante.