Qué diferencia hay entre cero null false y string vacío en php

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.

Léete también  Como empezar a crear páginas web

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.

Léete también  Tags HTML necesarios para crear una página web

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


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.