¿Son todas las comparaciones de igualdad de PHP simétricas?

¿Es $a == $b siempre equivalente a $b == $a ?

Creo que en JavaScript hay algunos casos extraños donde eso no es cierto, debido al casting.

Creo que ide es correcto. Haré otra pregunta .

Depende de lo que ocurra entre esas dos llamadas. De lo contrario, sí, esos son lo mismo. La orden no hace diferencia. Usar 2 iguales == Una cadena de 1 y un entero de 1, devolverá verdadero cuando se compara. El tipo se ignora, solo se compara el valor. Entonces no hay maldad.

http://php.net/manual/en/language.operators.comparison.php

  

Salidas: 1

http://www.ideone.com/JLJWQ

EDITAR

Para aclarar, no hay absolutamente nada que puedas poner en $ a o $ b para obtener un resultado diferente en la comparación, simplemente poniéndolo del otro lado del operador.

 $a="1234"; $b="1234"; echo $a==$b; echo $b==$a; 

El resultado de eso, para cualquier valor de $ a o $ b, siempre será sin duda cierto verdadero o falso falso.

En resumen, sí. $a == $b siempre será el equivalente de $b == $a . Hay algunas deficiencias, como flotadores. Por supuesto, no deberías anidar dos flotadores para la igualdad de todos modos.

EDITAR
Con respecto a los flotadores: si tuvieras dos flotadores y los compararas, técnicamente deberían ser los mismos. Sin embargo, los valores de punto flotante que parecen tener el mismo valor no necesitan ser realmente idénticos. Entonces, si $a es un literal .69 y $b es el resultado de un cálculo, pueden ser diferentes, pero ambos muestran el mismo valor. Esta es la razón por la que nunca debe comparar los valores de punto flotante usando el == .

Si necesita comparar valores de coma flotante, realmente necesita usar la diferencia aceptable más pequeña en su caso específico. Algo así funcionaría para comparar flotadores (estableciendo nuestra diferencia aceptable más pequeña en 0.000001 ):

 if(abs($a-$b) < 0.000001) { //Same } 

PHP: abs - valor absoluto

El único tipo que pude ver siendo diferente es algo así como:

 $foo = 1; $bar = 1; ($foo = $foo + $bar) == ($bar = $foo); 

Para ver por qué, míralo

 A -> ($foo = $foo + $bar) B -> ($bar = $foo); 

Si A se ejecuta primero, el resultado será 2 y el resultado de B será 2, por lo que son iguales y la prueba será true .

Si B se ejecuta primero, el resultado será 1 , y el resultado de B será 2, por lo que no son iguales y la prueba será false .

Pero para cualquier comparación de tipo único (donde A es una variable y no una expresión) siempre será reflexivo.

Entonces, en el sentido general, A == B no siempre es 100% garantizado que sea equivalente a B == A Para las variables, siempre será equivalente. Pero para expresiones complejas que implican asignación o modificación de variables, puede no serlo.

http://php.net/manual/en/language.operators.comparison.php

Existen diferentes operadores que puede usar si desea considerar el tipo de conversión en la comparación. == evalúa como verdadero en un valor igual, pero no compara el tipo de datos. === evalúa como verdadero cuando los valores son iguales al igual que los tipos de datos. El uso de este último considera la conversión de tipo donde normalmente se ignoraría (por ejemplo, cadena que representa un número entero y un número entero que se compara).

El orden de la lógica en el condicional no debe marcar la diferencia.

He intentado una serie de variaciones y no puedo encontrar un caso en el que ($a == $b) !== ($b == $a) pero ninguno hasta el momento haya funcionado:

  

Entonces, me rindo en este punto. Ideas bienvenidas!