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?
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.
$variable. Lo que quiere es en realidad:$variable == null(tenga en cuenta==)== nullhacía coincidir la cadena vacía y no solo nula o indefinida.$a = ''es un vaciostring,falsees un booleano,$a = 0;es un entero ynulles de tiponull. 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 comogetName(), no debería obtenernullcuando 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==nullyis_null($foo)tiene la misma función de$foo===null. La tabla también muestra algunos valores difíciles con respecto a lanullcomparación. (ϕ denota variables no inicializadas).Nunca uso
empty()yis_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))fuente
==nully===null.comprobar
==vs==='' == NULLdevolvería verdadero0 == NULLdevolvería verdaderofalse == nulldevolvería verdaderodonde como
'' === NULLdevolvería falso0 === NULLdevolvería falsofalse === NULLdevolvería falsofuente
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:
Allí se puede ver que una cadena vacía
""en comparación confalse,0,NULLo""producirá cierto.Es posible que desee utilizar
is_null[docs] o una comparación estricta (tercera tabla).fuente
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.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 .fuente
Si lo usa
==, php trata una cadena o matriz vacía comonull. Para hacer la distinción entrenullyempty, use===ois_null. Entonces:if($a === NULL)oif(is_null($a))fuente
PHP 7 isset () vs empty () vs is_null ()
fuente
Uso
empty: http://php.net/manual/en/function.empty.php .Ejemplo:
fuente