X

Diferencias entre NULL, 0, false y «» bien explicado [php]

Si programas en php casi seguro que más de 1 y posiblemente 1000 veces has acabado en la documentación mirando lo mismo. Esta vez te voy a explicar la diferencia entre 0, false, null y «» (string vacío) en php.

Precisamente la culpa de este artículo la tiene un compañero de trabajo, así que podemos darle las gracias. A pesar de programar durante años, y tener conocimientos avanzados muchas veces acabo mirando en la documentación de php cosas tan simples como analizar variables vacías.

Qué diferencia hay entre false, null, “string vacío” y 0 en php

Intentaré explicarlo todo de la forma más sencilla posible, y con los ejemplos más claros. De todas formas si queda alguna duda en alguna de las secciones, o crees que algo debería ser revisado puedes dejar un comentario y lo miramos.

Cuando programas en php, un campo vacío o sin valor se puede presentar de diferentes formas:

  • NULL
  • FALSE
  • 0
  • «»

Aquí es cuando llegan las dudas, pues a simple vista parecen 4 valores completamente diferentes o que se puedan interpretar de diversas formas. Pero esto no es del todo cierto.

Null, false, o y «» son básicamente lo mismo

Esta es la primera sorpresa que te puedes llevar al tratar de comparar estas cadenas. A veces hay que hacer comparar con if, isset, o de otras formas variadas un valor con otro, y los resultados son bastante obvios.

Supongamos por ejemplo que tenemos un archivo php con la siguiente estructura (puedes copiarlo y probarlo si quieres, pero te pondré también el resultado):

<?php

if(null == false){  echo('ok'); }
if(null == 0){  echo('ok'); }
if(null == ""){  echo('ok'); }
if(null == "0"){  echo('ok'); }
if(null == array()){  echo('ok'); }

if(false == ""){  echo('ok'); }
if(false == 0){  echo('ok'); }

if("" == 0){  echo('ok'); }
if(array() == 0){  echo('ok'); }

¿Cuales crees que serán los resultados así a ojo?, para tu sorpresa te va a devolver lo siguiente:

ok
ok
ok
ok
ok

ok
ok

ok
ok

Lo que significa que en todos los supuestos la comparación obtenida será positiva. Pero ojo, pues lo que significan los dos símbolos de igual (==) es que los valores sean iguales o valgan lo mismo (en este caso nada), mientras que si usas 3 (===) deben ser idénticos y no coincidiría en ninguno de los casos.

A tener en cuenta que cuando comparamos 0 como un string («0»), también se considera un valor nulo y lo mismo pasará con un array() vacío.

Con estas pruebas a la espalda, puedes encontrar cierta utilidad bastante interesante si estás acostumbrado a estar comparando valores contínuamente dentro de expresiones if.

Si le das un valor a una variable, ya bien sea a mano, o provenga de la base de datos, la puedes comprobar sin tener que revisar la igualdad para cualquiera de estos tipos de valores. Algo así:

<?php
$valor = 0;
if($valor){ echo("vale algo"); }else{ echo("no vale nada"); }

Te devolverá no vale nada, y lo mismo pasará si la variable tiene valor null, false o «». Es decir, que si en tu tabla de la base de datos tienes una columna que puede tener valor 0 o un número mayor, un null, o está vacía, puedes comprobarla sin compararla.

Cuando usar isset, is_null o empty

Ahora entonces llega la duda, para qué sirven entonces las funciones de php:

  • isset()
  • is_null()
  • empty()

Cada una de ellas te ayudará a realizar comprobaciones más concretas sobre la variable en cuestión:

isset()

No se fija en el valor, sino en si está definida una variable. Esto significa que basta con que la variable exista antes de la comprobación para que devuelva true. (por ejemplo $var=0, $var=»» o $var=null).

<?php
$valor = null;
if(isset($valor)){ echo("está definido"); }else{ echo("no está definido"); }

Como resultado en este caso indicará está definido, ya que como comentaba la variable existe aunque su valor sea null.

is_null()

En este caso y como su nombre indica comprueba si una variable está definida como null. Esta puede venir de la base de datos también y devolverá true.

<?php
$valor = null;
if(is_null($valor)){ echo("true history!"); }
$valor = false;
if(is_null($valor)){ echo("true history!"); }

La primera coincidirá y devolverá true history! mientras que la segunda va a devolver false y no se mostrará el contenido del if.

empty()

Por último empty analiza si una variable además de existir tiene algún valor. Esto significa que mientras el contenido de la variable sea equivalente a null (como hemos visto antes), no devolverá true.

Es decir, empty($valor) devuelve true si:

  • $valor = «»
  • $valor = null
  • $valor = false
  • $valor = 0 (0.0 o «0»)

Cualquier comentario es bien recibido así que si te quedan dudas o me he dejado algo…

¿Cómo usabas las comparaciones entre estas variables? Comenta y comparte

VicHaunter:
Artículo relacionado
Los comentarios de Disqus están cargando....

Como todos, usamos cookies.