Tengo una pregunta sobre NULLen PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
¿Por qué veo que es nulo cuando $aes una cadena vacía? ¿Eso es un error?
Tengo una pregunta sobre NULLen PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
¿Por qué veo que es nulo cuando $aes una cadena vacía? ¿Eso es un error?
Respuestas:
Lo que estás buscando es:
if($variable === NULL) {...}
Tenga en cuenta el ===.
Cuando el uso ==, como lo hizo, PHP trata NULL , falsa , 0 , el vacío de cadena y vacíos matrices como iguales.
== nullhacía coincidir la cadena vacía y no solo nula o indefinida.
$a = ''es un vacio string, falsees un booleano, $a = 0;es un entero y nulles de tipo null. Lo que OP dice es que PHP los enhebrará como "iguales" en valor, pero no como "iguales" en tipo. Por lo tanto, una verificación estricta === también verificará el tipo y fallará si usa diferentes. Esa es la razón por la que debe ser consistente en sus valores de retorno. Si normalmente devuelve una cadena en un método como getName(), no debería obtener nullcuando está vacío, sino más bien una cadena vacía $user->getName() === ''o $user->getId() === 0o $user->isActive === false. Comportamiento previsto!
Como se muestra en la siguiente tabla, empty($foo)es equivalente $foo==nully is_null($foo)tiene la misma función de $foo===null. La tabla también muestra algunos valores difíciles con respecto a la nullcomparación. (ϕ denota variables no inicializadas).
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Nunca uso empty()y is_null()funciones. Usar una comparación simple es menos ambiguo, más rápido y más limpio. Particularmente habrá menos llaves para hacer juego.
por ejemplo if($x==null || $y==null)vsif(is_null($x) || is_null($y))
==nully ===null.
comprobar ==vs===
'' == NULLdevolvería verdadero
0 == NULLdevolvería verdadero
false == nulldevolvería verdadero
donde como
'' === NULLdevolvería falso
0 === NULLdevolvería falso
false === NULLdevolvería falso
No, no es un error. Eche un vistazo a las comparaciones sueltas con == tabla (segunda tabla), que muestra el resultado de comparar cada valor en la primera columna con los valores en las otras columnas:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Allí se puede ver que una cadena vacía ""en comparación con false, 0, NULLo ""producirá cierto.
Es posible que desee utilizar is_null [docs] o una comparación estricta (tercera tabla).
0cuando se convierte en una cadena: codepad.org/qi40SG3E . Por lo tanto (int)"php" == 0.
Esto no es un error, sino un comportamiento normal de PHP. Ocurre porque el ==operador en PHP no verifica el tipo.
'' == null == 0 == false
Si también desea verificar si los valores tienen el mismo tipo, use ===en su lugar. Para estudiar en profundidad esta diferencia, lea la documentación oficial .
Si lo usa ==, php trata una cadena o matriz vacía como null. Para hacer la distinción entre nully empty, use ===o is_null. Entonces:
if($a === NULL) o if(is_null($a))
Uso empty: http://php.net/manual/en/function.empty.php .
Ejemplo:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable. Lo que quiere es en realidad:$variable == null(tenga en cuenta==)