Reputation: 54949
I also get confused how to check if a variable is false
/null
when returned from a function.
When to use empty()
and when to use isset()
to check the condition ?
Upvotes: 29
Views: 102438
Reputation: 522099
For returns from functions, you use neither isset
nor empty
, since those only work on variables and are simply there to test for possibly non-existing variables without triggering errors.
For function returns checking for the existence of variables is pointless, so just do:
if (!my_function()) {
// function returned a falsey value
}
To read about this in more detail, see The Definitive Guide To PHP's isset
And empty
.
Upvotes: 19
Reputation: 7822
It is important to use the correct function / notation, not just whatever appears to work correctly. There are a few things to consider that are not mentioned in the existing answers.
isset
to check if a variable has either not been set or has been set to null
.empty
to check if a variable == false. null
is cast to false
and as with isset, no notice is thrown if the variable has not been set.if (!$variable)
or if ($variable == false)
is the same as empty
, except that a notice will be thrown if the variable has not been set.
if ($variable !== null)
is the same as isset
, except that a notice will be thrown if the variable has not been set.
NB
if (!$variable)
and if ($variable !== null)
perform better than their respective functions but not when notices are being generated, therefore, $variable needs to have been set. Don't suppress notices as a micro-optimisation, as this will make your code harder to debug and even suppressed notices cause a performance penalty.
Coalescing operators
If you are checking a variable so that you can assign a value to it, then you should use ??
, ?:
instead of if
statements.
??
??
assigns a value when not equal to null.
$variable = $a ?? $b
is the same as:
if (isset($a))
$variable = $a;
else
$variable = $b;
?:
?:
assigns a value when not == to false.
$variable = $a ?: $b
is the same as:
if ($a)
$variable = $a;
else
$variable = $b;
but remember that a notice will be generated when $a has not been set. If $a might not have been set, you can use $variable = !empty($a) ? $a : $b;
instead.
Upvotes: 1
Reputation: 1917
Isset() checks if a variable has a value including ( False , 0 , or Empty string) , But not NULL. Returns TRUE if var exists; FALSE otherwise.
On the other hand the empty() function checks if the variable has an empty value empty string , 0, NULL ,or False. Returns FALSE if var has a non-empty and non-zero value.
Upvotes: 6
Reputation: 5817
Checking variable ( a few examples )
if(is_null($x) === true) // null
if($x === null) // null
if($x === false)
if(isset($x) === false) // variable undefined or null
if(empty($x) === true) // check if variable is empty (length of 0)
Upvotes: 12
Reputation: 349
isset — Determine if a variable is set and is not NULL
$a = "test";
$b = "anothertest";
var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE
unset ($a);
var_dump(isset($a)); // FALSE
empty — Determine whether a variable is empty
<?php
$var = 0;
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if (isset($var)) {
echo '$var is set even though it is empty';
}
?>
Upvotes: 2
Reputation: 3962
ISSET
checks the variable to see if it has been set, in other words, it checks to see if the variable is any value except NULL
or not assigned a value
. ISSET returns TRUE if the variable exists and has a value other than NULL. That means variables assigned a " ", 0, "0", or FALSE are set, and therefore are TRUE for ISSET.
EMPTY
checks to see if a variable is empty. Empty is interpreted as: " " (an empty string), 0 (0 as an integer), 0.0 (0 as a float), "0" (0 as a string), NULL, FALSE, array() (an empty array), and "$var;" (a variable declared, but without a value in a class.
Upvotes: 2
Reputation: 9
empty() is an evil.It is slow,and when $v queals false,0,'0',array(),'',it will return true.if you need this kind of checking,you can use if ($v).
Upvotes: 0