Cita:
Iniciado por dashtrash Que cero no es un valor? ... Entonces..qué es?
Se podría montar una discusión sobre null..Pero..sobre cadena vacía? Cómo que no contiene un valor?
No hay tal cosa como "tipo false".Hay tipo entero, y tipo booleano.0 es un tipo entero.!== te dirá que 0 no es igual a false, ya que hace comprobación de tipo.
Código PHP:
Ver original//aquí y en este momento cero es un valor
$a=0;
//en PHP dentro de la condición 'if' '0' es igual a 'null' y "", es decir, lo interpreta como que no hay valor, lo puedes comprobar así
$a=0;
if ( $a== "" ) //también if ( $a== null )
{
echo $a;
}
//imprimirá 0
Es en las expresiones del if donde 0 se interpreta como false, como "" y como null.
!== me dirá que 0 no es
idéntico a false porque no son del mismo tipo pero son iguales después de la conversión a tipos que 'if' somete al número 0.
eso lo dice
aquí Cita: $a == $b Igual TRUE si $a es igual a $b después de la manipulación de tipos.
¿qué ocurre? pues que para la negación
no es lo mismo != (que sería la negación de la anterior comparación lógica de igualdad)
Cita: $a != $b Diferente TRUE si $a no es igual a $b después de la manipulación de tipos.
que !== (que sería la
la comparación lógica de negación de tipos iguales).
La comparación lógica de tipos iguales es ===
Cita: $a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.
todo sobre operadores lógicos de comparación está en el anterior enlace y sobre el cero, false, true,
aquí
y la manipulación de tipos
aquí
Cristopher-2006
no es lo mismo decir
que
puesto que en el primer if lo que estás diciendo es algo parecido a
"si el valor de la variable 'a' no es igual a true..." con eso estás discriminando a true pero aceptando el resto de posibles valores.
en cambio en el segundo if estás diciendo que "si $a es igual a false..." y solo a false, discriminas el resto de valores y solo aceptas false.
saludos! :)