Introducción

Veremos y compararemos a isset vs empty en PHP. Como sabemos, estas dos funciones existen en PHP y permiten comparar valores nulos o vacíos.

isset vs empty en PHP

isset

A isset no le importa el valor de la variable que estamos probando, sólo le importa que no sea nulo. Esto viene bien cuando no nos importa el tipo de valor que tiene la variable, y sólo necesitamos saber si existe.

Más bien dicho, sólo testea o prueba si existe una variable. Supongo que de ahí su nombre de “is set”.

Devuelve true si la variable existe, false en caso contrario.

Ejemplos:

$var1 = null;
isset($var1); # false, porque está en null
isset($var2); # false, ni siquiera la hemos declarado

$arreglo = [
  "nombre" => "María",
];

isset($arreglo); # true, claro que está definido
isset($arreglo["nombre"]); # true, pues sí existe el nombre
isset($arreglo["edad"]); #false, arreglo existe pero la clave edad no
# Lo de abajo da falso, ya que para empezar
# no existe la clave deportes, entonces no puedes leer la propiedad
# null de null
isset($arreglo["deportes"]["preferidos"]);

 

empty

empty es un poco mejor pero también peligrosa. A esta sí le importa el valor de la variable, pero tiene sus preferencias en cuanto a decidir si está vacía o no.

La usamos para probar si un arreglo está vacío ([]), una cadena está vacía (“”), un número es 0, entre otros. Citando la documentación oficial…

Las siguientes expresiones son consideradas como vacías:

  • “” (una cadena vacía)
  • 0 (0 como un integer)
  • 0.0 (0 como un float)
  • “0” (0 como un string)
  • NULL
  • FALSE
  • array() (un array vacío)
  • $var; (una variable declarada, pero sin un valor)
Relacionado:  Local server o servidor HTTP simple en Python 3

Esta función viene bien cuando queremos, por ejemplo, saber si una cadena está definida y aparte de ello no está vacía. Normalmente podríamos hacer esto (puede variar, por ejemplo podemos usar is_string, strcmp, strlen, mb_strlen pero es un ejemplo):

if(isset($_POST["nombre"]) && $_POST["nombre"] !== ""){
echo "OK";
}

Ya que si sólo comparamos con:

if($_POST["nombre"] !== ""){
echo "OK";
}

Y algún gracioso no manda el campo de “nombre” (por lo que está definido), saldrá este maravilloso error:

PHP Notice: Undefined index: nombre

Pero con empty nos ahorramos ese código, y queda más bonito sin errores. Así:

if(!empty($_POST["nombre"])){
echo "OK";
}

Es más silencioso y limpio. Así probará si la variable está definida y no está vacía.

Lo peligroso de empty

Lo peligroso de esta función es que puede devolver falso cuando realmente algo no está vacío.

Por ejemplo, si estamos recibiendo un número entero que representa los puntos que tiene un usuario (puede ser 0), empty devolverá false incluso si el valor está definido; ya que, como vimos arriba, 0 pasa como false. Y también la cadena “0”

¿Entonces cuál usar?

Depende, como siempre. Ya comparamos isset vs empty en PHP pero depende de nosotros y nuestras costumbres.

La función empty no genera errores si la clave no existe, pero a veces devuelve falsos cuando no lo son.

E isset genera errores, no ve cadenas vacías o números en 0, pero sólo verifica si no es null.

Recomendación

Ya que PHP es un lenguaje en donde los tipos no están bien definidos (excepto por PHP 7 en donde tenemos una pequeña mejora) recomiendo probar con las siguientes funciones:

Relacionado:  Grabar vídeo con JavaScript y enviarlo a servidor con PHP

is_numeric()

is_int()

is_string()

Y si probamos enteros, también probar con > y < y los operadores de comparación. Con cadenas recomiendo usar strcmp o strlen, o incluso mejor: mb_strlen.

Antes de usar estas funciones, podemos usar isset para no tener errores de valores indefinidas o índices no existentes. O al menos esa es mi recomendación.

Finalmente, no olvidemos utilizar el valor de identidad === en lugar de ==. O !== en lugar de !=.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 707 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

2 Comments

Sesiones en CodeIgniter - Parzibyte's blog · junio 19, 2019 a las 1:16 pm

[…] usar métodos simples como isset($_SESSION) o […]

SQLite3 y PDO con PHP: crud y ejemplos - Parzibyte's blog · septiembre 17, 2018 a las 12:00 pm

[…] Primero comprobamos que existan datos, es decir, que los datos del formulario se hayan llenado correctamente (aquí la explicación de la función empty) […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: