Foros del Web » Programando para Internet » PHP »

Diferencia entre == y ===

Estas en el tema de Diferencia entre == y === en el foro de PHP en Foros del Web. Hola amigos, Hace tiempo lei que usar === en un if, es más rapido que usar == siempre y cuando estés seguro que lo que ...
  #1 (permalink)  
Antiguo 22/08/2010, 06:00
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Diferencia entre == y ===

Hola amigos,

Hace tiempo lei que usar === en un if, es más rapido que usar == siempre y cuando estés seguro que lo que comparas es el mismo tipo de variable.
Mi pregunta es si realmente vale la pena, y con que tengo que ir con cuidado al usarlo para que no me dé errores.

Por ejemplo, si tengo una variable $a y una $b, si se que las dos son enteros, el codigo va más rapido si pongo ===?

Muchas gracias
  #2 (permalink)  
Antiguo 22/08/2010, 06:43
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Diferencia entre == y ===

No sé si hay diferencia de velocidad, nunca me lo había planteado aunque si la hubiese, ni se notaría, (creo).
¡Sin embargo, aunque parecidos su uso no es el mismo!

El '==' se usa para comprobar si los valores de los dos operandos son iguales o no, mientras que '===' comprueba los valores, así como el tipo de operandos.

Se ve muy fácil en este ejemplo. te marco con comentario ( //resultado) que devolvería.

Código PHP:
if ("1" == 1) echo "es igual"//resultado
 
else echo "no es igual"


if (
"1" === 1) echo "es igual"
 else echo 
"no es igual";  //resultado 
Por último usando '===' y convirtiendo el 2º valor a string devolverá que es igual. Ya que como dije antes, compara valores y tipo de operando.
Código PHP:
 if ("1" === (string) 1) echo "es igual"//resultado
 
else  echo "no es igual"
Espero que te sirva de ayuda y haberme explicado.
Un saludo.
  #3 (permalink)  
Antiguo 22/08/2010, 08:31
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Diferencia entre == y ===

Es muy usado para las funcione que buscan textos pues o retornan la posición del carácter en la cadena o false si no encontraron nada....
Pues si se usa solo == y la función retorna 0, aquí pensaríamos que no se encontró nada, y sin embargo el carácter buscado esta presente, por lo cual se deberia usar ===.
Ej, del manual php
Código PHP:
Ver original
  1. $cadena = 'abc';
  2. $busco   = 'a';
  3. $pos = strpos($cadena, $busco);
  4.  
  5. // Nótese el uso de ===. Puesto que == simple no funcionará como se espera
  6. // porque la posición de 'a' está en el 1° (primer) caracter.
  7. if ($pos === false) {
  8.     echo "La cadena '$busco' no fue encontrada en la cadena '$cadena'";
  9. } else {
  10.     echo "La cadena '$busco' fue encontrada en la cadena '$cadena'";
  11.     echo " y existe en la posición $pos";
  12. }
  13. ?>

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #4 (permalink)  
Antiguo 22/08/2010, 08:40
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Diferencia entre == y ===

la diferencia es que === compara además del valor el tipo de las variables, por ende es más lento ya que realiza una verificación extra
  #5 (permalink)  
Antiguo 22/08/2010, 08:48
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Diferencia entre == y ===

Bueno hice una prueba simple:
1.000.000 de repeticiones con la consulta if ($a == $b) {}:

si $a = 1 y $b = 1;
Velocidad 1.000.000 de repeticiones
== tiempo 0.161655902863
=== tiempo 0.144984006882

Si $a=1 y $b='1'

== 0.291306018829
=== 0.132959842682

Si $a='1' y $b='1'
== 0.383652210236
=== 0.170083045959

Salvo que lo uses indiscriminadamente no va a ser tu código mucho mas veloz...
Pero me sorprendió que fuera mas rápido el ===....

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 22/08/2010, 08:54
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Diferencia entre == y ===

Cita:
Iniciado por portalmana Ver Mensaje
Bueno hice una prueba simple:
1.000.000 de repeticiones con la consulta if ($a == $b) {}:

si $a = 1 y $b = 1;
Velocidad 1.000.000 de repeticiones
== tiempo 0.161655902863
=== tiempo 0.144984006882

Si $a=1 y $b='1'

== 0.291306018829
=== 0.132959842682

Si $a='1' y $b='1'
== 0.383652210236
=== 0.170083045959

Salvo que lo uses indiscriminadamente no va a ser tu código mucho mas veloz...
Pero me sorprendió que fuera mas rápido el ===....

Saludos
Oye.... interesante! toma un poco de karma.
  #7 (permalink)  
Antiguo 22/08/2010, 08:59
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Diferencia entre == y ===

Gracias,
y uno con estas cosas siempre sigue aprendiendo......
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #8 (permalink)  
Antiguo 22/08/2010, 09:04
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Diferencia entre == y ===

Es lógico que === sea más rápido. PHP tiene los tipos de variables dinámicos, eso a su vez que facilita también puede ser causa de muchos errores muy dificiles de detectar. Bien, entonces por qué la velocidad? Pues porque cuando usamos == ambas variables a compararse pueden ser de tipos distintos. El intérprete PHP tiene primero que indentificar los tipos y hacer (ignoro exactamente cómo) que ambas variables sean del mismo tipo para compararlas (obviamente es imposible comparar dos variables de distinto tipo). Esta conversión conlleva un tiempo más, lo cual no dura una eternidad, mucho menos. Así que se pueden relajar y usar == todo el tiempo, la diferencia es imperceptible. Pero, la pregunta es: cuando usar == y === respectivamente? Pues usa === cuando la comparación deba ser estricta. Un ejemplo típico es cuando se usa la función strpos, de una manera parecida a esto:

Código PHP:
$p strpos($texto'a');
if (
$p === false) echo 'No se encontró la letra "a" en la cadena'
La función strpos devuelve false cuando no encuentra la cadena a buscar, pero si la encuentra en la primera posición devuelve 0, el cual es equivalente a false. Este es un buen caso para ilustrar cuando es necesario el uso de ===. Ahora también puede usarse en el caso en que el programador sea tan paranoico que quiera hacer que su sistema sea 0.00001% (aproximadamente) más rápido que el de la competencia. Es una broma.

Espero que mis explicaciones hayan aclarado un poco el tema.
  #9 (permalink)  
Antiguo 22/08/2010, 09:10
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Diferencia entre == y ===

siendo así, que primero verifique los tipos si tiene lógica que sea más rápido, pero es relativo y debe usarse para lo que se necesita
  #10 (permalink)  
Antiguo 22/08/2010, 16:55
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Respuesta: Diferencia entre == y ===

Cada granito de arena cuenta!! creo que ahora voy a empezar a usar === :D

Etiquetas: ===, diferencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:49.