Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
En casi todos los programas que escribas en PHP harás uso de las variables. La mayoría de las veces estas variables tienen un valor, y normalmente las creamos con un valor inicial. Sin embargo, siempre existe la posibilidad de que algunas de las variables que estés utilizando no estén inicializadas. Esto puede resultar en una advertencia de PHP sobre el uso de una variable no definida.
Puedes tener variables no definidas debido a muchas razones. Las más comunes son que, de hecho, no hayas definido la variable, o bien que hayas cometido un error de ortografía al reutilizarla en otro lugar. Este es solo un error de programación. Sin embargo, otra posibilidad que puede resultar en una variable no definida es que esta última se haya definido condicionalmente.
También puedes encontrarte con que una variable tiene el valor NULL
, o nulo. Esto también puede ocurrir por varias razones. Por ejemplo, es posible que la variable simplemente no haya sido inicializada con un valor. O el valor nulo podría ser devuelto por una función para indicar algún tipo de error.
En cualquier caso, usar una variable antes de que se haya definido, o cuando tiene un valor nulo, puede tener consecuencias no deseadas. En este tutorial te mostraré cómo verificar si un elemento ha sido definido y ver si está vacío o tiene un valor nulo.
Puedes usar isset()
, empty()
o is_null()
para comprobar si una o todas esas condiciones son verdaderas o falsas.
Definiciones
Comencemos con algunas definiciones.
-
isset()
: Puedes usarisset()
para determinar si una variable está declarada y si tiene un valor diferente anull
. -
empty()
: Se usa para determinar si la variable existe y si su valor no se evalúa comofalse
. -
is_null()
: Esta función se usa para verificar si una variable tiene el valornull
.
isset()
vs. empty()
en PHP
Como vimos en las definiciones, isset()
devolverá true
si hemos definido la variable con anterioridad y si hemos establecido su valor en algo diferente a NULL
. Esto puede ser 0
, una cadena vacía o false
. Por otro lado, empty()
devolverá true
siempre que el valor de la variable se establezca en algo que se evalúe en false
; a estos valores los llamamos "falsey". Ejemplos de valores "falsey" son 0
, la cadena vacía ""
y la cadena "0"
, una matriz vacía, NULL
o, por supuesto, el valor booleano false
.
Una similitud entre isset()
y empty()
es que ambas son construcciones de lenguaje y, por lo tanto, no pueden llamarse usando funciones variables.
El siguiente fragmento de código debería explicar la diferencia entre estas dos funciones.
1 |
<?php
|
2 |
|
3 |
$fruit = ''; |
4 |
|
5 |
if(isset($fruit)) { |
6 |
echo 'Do you like '.$fruit.'?'; |
7 |
}
|
8 |
// Output: Do you like ?
|
9 |
|
10 |
if(!empty($fruit)) { |
11 |
echo 'Do you like '.$fruit.'?'; |
12 |
}
|
13 |
// No Output
|
14 |
|
15 |
?>
|
Observa que empty()
puede ser escrita usando la función isset()
:
1 |
<?php
|
2 |
|
3 |
function my_empty($x) { |
4 |
return !isset($x) || $x == false |
5 |
}
|
6 |
|
7 |
?>
|
Por supuesto, generalmente es más fácil usar la función empty()
integrada.
isset()
vs. is_null()
en PHP
La función is_null()
devuelve true
si el valor de una variable se ha establecido explícitamente en NULL
. De lo contrario, simplemente devuelve false
. Por otro lado, isset()
devolverá true
siempre y cuando una variable esté definida y su valor no sea NULL
.
Aquí hay un ejemplo básico para mostrar la diferencia entre estas funciones.
1 |
<?php
|
2 |
|
3 |
$fruit = NULL; |
4 |
|
5 |
if(isset($fruit)) { |
6 |
echo 'Do you like '.$fruit.'?'; |
7 |
}
|
8 |
// No Output
|
9 |
|
10 |
if(is_null($fruit)) { |
11 |
echo 'There is no fruit.'; |
12 |
}
|
13 |
// Output: There is no fruit.
|
14 |
|
15 |
?>
|
empty()
vs. is_null()
en PHP
La función empty()
devuelve true
si el valor de una variable se evalúa como false
. Esto puede significar que contiene la cadena vacía, NULL
, el entero 0
o una matriz sin elementos. Por otro lado, is_null()
devolverá true
solamente si la variable tiene el valor NULL
.
Aquí puedes ver un ejemplo básico para mostrar la diferencia entre ellas.
1 |
<?php
|
2 |
|
3 |
$person = ['first_name' => 'Monty', 'last_name' => '', 'age' => '83', 'fav_movie' => NULL]; |
4 |
|
5 |
if(empty($person['last_name'])) { |
6 |
if(is_null($person['last_name'])) { |
7 |
echo 'The last name is set to NULL.'; |
8 |
} else { |
9 |
echo 'The last name is probably an empty string.'; |
10 |
}
|
11 |
}
|
12 |
// Output: The last name is probably an empty string.
|
13 |
|
14 |
if(is_null($person['fav_movie'])) { |
15 |
echo $person['first_name'].' did not specify a favorite movie.'; |
16 |
}
|
17 |
// Output: Monty did not specify a favorite movie.
|
Puntos importantes a recordar
Hay dos consejos que puedes usar para escribir código más conciso y evitar errores en el futuro.
1. A diferencia de empty()
e is_null()
, puedes enviar múltiples valores a isset()
a la vez para comprobar simultáneamente si cualquiera de ellos carece de definición o si su valor está establecido en NULL
. En ese caso, isset()
solamente devolverá true
si ninguno de los valores enviados es NULL
.
2. No uses ==
para comprobar si un valor es NULL
. Esto dará un falso positivo para valores "falsey" como una cadena vacía que se evalúa como false
.
Pensamientos finales
Este tutorial explicó rápidamente la diferencia entre isset()
, empty()
e is_null()
. Con suerte, ahora podrás determinar cuál de ellos es adecuado usar en tu código.