Tengo una pregunta sobre NULL
en PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
¿Por qué veo que es nulo cuando $a
es 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==
)== null
hacía coincidir la cadena vacía y no solo nula o indefinida.$a = ''
es un vaciostring
,false
es un booleano,$a = 0;
es un entero ynull
es 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 obtenernull
cuando está vacío, sino más bien una cadena vacía$user->getName() === ''
o$user->getId() === 0
o$user->isActive === false
. Comportamiento previsto!Como se muestra en la siguiente tabla,
empty($foo)
es equivalente$foo==null
yis_null($foo)
tiene la misma función de$foo===null
. La tabla también muestra algunos valores difíciles con respecto a lanull
comparació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
==null
y===null
.comprobar
==
vs===
'' == NULL
devolvería verdadero0 == NULL
devolvería verdaderofalse == null
devolvería verdaderodonde como
'' === NULL
devolvería falso0 === NULL
devolvería falsofalse === NULL
devolverí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
,NULL
o""
producirá cierto.Es posible que desee utilizar
is_null
[docs] o una comparación estricta (tercera tabla).fuente
0
cuando 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 entrenull
yempty
, 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