2010-01-14 12 views
119

¿Cuál es la diferencia entre =, == y ===?Los 3 diferentes es igual a

Creo que usar un signo igual es declarar una variable, mientras que dos signos iguales son para una condición de comparación y, por último, tres signos iguales son para comparar valores de variables declaradas.

+0

echa un vistazo al ejemplo ... Lo publiqué aclararía más cosas .. –

+1

Para usuarios avanzados de PHP, sabiendo la diferencia entre == y === y preguntándose "¿es más rápido comparar con == o con === ¿Cuándo estoy seguro de que ambos operandos son del mismo tipo? ", mire mi script de referencia a continuación. – lucaferrario

+0

@Strawberry Creo que la etiqueta de la pregunta también debe incluir la etiqueta [javascript] (http://stackoverflow.com/tags/javascript/info) ya que también se aplica a ese idioma. –

Respuesta

149

Tienes = el operador de asignación , == el operador comparación 'igual' y=== el operador 'idéntico' comparación.

$a = $b  Assign  Sets $a to be equal to $b. 
$a == $b Equal  TRUE if $a is equal to $b. 
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4) 

Para obtener más información sobre la necesidad de == y === y situaciones de utilizar cada uno, mirar a the docs.

+0

cuando comparo dos fechas idénticas, tengo un resultado falso, ¿por qué? ejemplo: http://sandbox.onlinephpfunctions.com/code/aef1451396f26fd6f8b623c4bb676f508c938006 – stloc

+0

@stloc, '===' con objetos le dice si son el mismo objeto, no si tienen el mismo contenido. – Andrea

2

Tiene usted razón de que = es el operador de asignación. Los otros dos son operadores de comparación que puede leer más sobre here.

7

= asignación operador

cheques == si dos variables tienen el mismo valor

cheques === si dos variables tienen el mismo valor y si sus tipos son los mismos

+1

También conozca las versiones! = Y! == 'no' de los dos operadores de comparación. Algunos lenguajes usan: = como asignación, solo para evitar este tipo de confusión. –

18
  • = es el operador de asignación
  • == es el operador de comparación (comprueba si dos variables tienen valores iguales)
  • === es el operador de comparación idéntico (comprueba si dos variables tienen valores iguales y son del mismo tipo ).
1

Todos los demás han aclarado ... Sólo quiero añadir un ejemplo para aclarar más:

<?php 
    $mystring = 'abc'; 
    $findme = 'a'; 
    $pos = strpos($mystring, $findme); 

    // Note our use of ===. Simply == would not work as expected 
    // because the position of 'a' was the 0th (first) character. 
    if ($pos === false) { 
     echo "The string '$findme' was not found in the string '$mystring'"; 
    } 
    else { 
     echo "The string '$findme' was found in the string '$mystring'"; 
     echo " and exists at position $pos"; 
    } 
?> 
2

Tal vez usted pueda comprender mejor la diferencia entre == y === con un ejemplo que implica automáticas de colada:

echo '"5 is not a number" == 5'."\n"; 
if("5 is not a number" == 5) { 
    echo "maybe there is something wrong here\n"; 
} else { 
    echo " The integer and the string are different\n"; 
} 
echo '"5 is not a number" === 5'."\n"; 
if("5 is not a number" === 5) { 
    echo "maybe there is something wrong here\n"; 
} else { 
    echo " The integer and the string are different\n"; 
} 
+0

Ejemplo perfecto :) – gnarf

+5

No entiendo el propósito de este ejemplo. –

+0

@KorayTugay El propósito del ejemplo es mostrarle que dos expresiones, en comparación con los dos operadores, darán lugar a resultados opuestos. Sin embargo, no hay un operador bueno ni malo, debes elegir uno u otro en función de tus necesidades. – Eineki

1

para los usuarios avanzados de PHP, conocer la diferencia entre == y === y se preguntan "¿es más rápido para comparar con == o con === cuando estoy seguro de que ambos operandos son del mismo tipo? "

La respuesta breve y general es: No hay ganancia de rendimiento en el uso === en estos casos, por lo que es mejor usar ==.

para los interesados ​​en la evaluación comparativa de ellos mismos, puede utilizar el siguiente código que he escrito ad-hoc y probar diferentes valores para $a y $b:

<?php 
    // CONFIGURATION 
    $cycles = 1000000; 
    $a = 'random string 1'; 
    $b = 'random string 2'; 

    // FUNCTIONS 
    function compare_two_equals($a, $b) { 
     if ($a == $b) { 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
    } 

    function compare_three_equals($a, $b) { 
     if ($a === $b) { 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
    } 

    // EXECUTION 
    $time = microtime(TRUE); 
    for ($count_a = 0; $count_a < $cycles; $count_a++) { 
     compare_two_equals($a, $b); 
    } 
    $time_two_a = microtime(TRUE) - $time; 
    $time = microtime(TRUE); 
    for ($count_a = 0; $count_a < $cycles; $count_a++) { 
     compare_three_equals($a, $b); 
    } 
    $time_three_a = microtime(TRUE) - $time; 
    $time = microtime(TRUE); 
    for ($count_a = 0; $count_a < $cycles; $count_a++) { 
     compare_two_equals($a, $b); 
    } 
    $time_two_b = microtime(TRUE) - $time; 
    $time = microtime(TRUE); 
    for ($count_a = 0; $count_a < $cycles; $count_a++) { 
     compare_three_equals($a, $b); 
    } 
    $time_three_b = microtime(TRUE) - $time; 
    $time = microtime(TRUE); 

    // RESULTS PRINTING 
    print "<br />\nCOMPARE == (FIRST TRY): " . number_format($time_two_a, 3) . " seconds"; 
    print "<br />\nCOMPARE == (SECOND TRY): " . number_format($time_two_b, 3) . " seconds"; 
    print "<br />\nCOMPARE === (FIRST TRY): " . number_format($time_three_a, 3) . " seconds"; 
    print "<br />\nCOMPARE === (SECOND TRY): " . number_format($time_three_b, 3) . " seconds"; 
?> 

NOTA: La comparación es válida sólo cuando cada uno "FIRST TRY" está muy cerca de su "SEGUNDO INTENTO". Si son significativamente diferentes, significa que el procesador estaba ocupado haciendo otra cosa mientras ejecutaba las comparaciones y, por lo tanto, los resultados no son confiables y el punto de referencia debería volver a ejecutarse.

+8

Microbenchmarks como este no son muy confiables. También es muy poco probable que alguna vez quiera preocuparse por '==' o '===' como la causa de su problema de rendimiento.OMI: Es mejor ser estricto ('===') a menos que explícitamente quiera estar suelto ('==') sobre sus comparaciones. El número de casos de bordes extraños, es decir, '" 5 no es un número "== 5', puede provocar errores extraños. '===' nunca sufre de este problema. – gnarf

+0

Mi prueba fue decirles a los programadores que si están eligiendo '===' por razones de rendimiento, están equivocados. Así que los programadores son libres de elegir '===' o '==' basándose en razones lógicas pero no en razones de rendimiento: hay diferentes casos para preferir uno u otro y el rendimiento no debe tenerse en cuenta en absoluto. – lucaferrario

3

La explicación más simple sé:

<?php 

$a = 1; 
$b = "1"; 
echo "comparing different types:<br/>"; 
compare($a, $b); 

$a = 1; 
$b = 1; 
echo "comparing equal types:<br/>"; 
compare($a, $b); 

function compare($a, $b) 
{ 
    if($a == $b) 
     echo "a == b<br/>"; 

    if($a === $b) 
     echo "a === b<br/>"; 
} 

?> 
1

Siguiendo diferencia entre =. ==. y ===:

= operador de asignación, operador de comparación

== 'igual' y

'idénticos' operador de comparación ===.

$a = $b Asignar conjuntos $ a equivalentes a $ b. es decir, $ a asignar valor 5.

$a == $b Equal TRUE si $ a es igual a $ b. es decir if($a==5) Aquí vemos que estamos usando == para comparar el valor.

$a === $b Idéntico TRUE si $ a es igual a $ b, y son del mismo tipo. (introducido en PHP 4) es decir ($a ===5) Esto también se usa para comparación pero compara el valor y también el tipo de datos también. Significa $a = '5' y $a = 5 no es lo mismo. $a = '5' significa $ a asignar la cadena '5' y $a=5 asignar un valor entero de 5.