is_null() emits a WARNING if variable is not set, but isset() and empty() don't.
$a - variable with not null value (e.g. TRUE)
$b - variable with null value. `$b = null;`
$c - not declared variable
$d - variable with value that cast to FALSE (e.g. empty string, FALSE or empty array)
$e - variable declared, but without any value assigned
$a->a - declared, but not assigned object property. (`public $a;`)
A::$a - declared, but not assigned static class property.
| $a | $b | $c | $d | $e | $a->a | A::$a |
---------+-------+-------+-------+-------+-------+-------+-------+
is_null()| FALSE | TRUE |TRUE*W | FALSE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
isset() | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
---------+-------+-------+-------+-------+-------+-------+-------+
empty() | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
null === | FALSE | TRUE |TRUE*W | FALSE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
null == | FALSE | TRUE |TRUE*W | TRUE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
TRUE*W - function return TRUE, but same time emits WARNING.
On empty() function documentation page you can read, that: The following things are considered to be empty: .... $var; (a variable declared, but without a value)
It can be misleading that code $var; is defining a variable, but does not
assign any value to it, but it is wrong. Variable $var is still undefined and type recognize functions, like is_null() emits warnings if you pass $var as an argument. But it is not right for unsettled class or object properties. Declaring them without assigning some value automatically assigns NULL. UPD Typed properties in PHP 7.4 DO NOT assigned by NULL by default. If you does not set any value to them, they are considered as unassigned. Some low
level descriptions: isset() and empty() are core functions, that will be compiled directly to specific opcode according to zval type:
ZEND_ISSET_ISEMPTY_THIS
ZEND_ISSET_ISEMPTY_CV
ZEND_ISSET_ISEMPTY_VAR
ZEND_ISSET_ISEMPTY_DIM_OBJ
ZEND_ISSET_ISEMPTY_PROP_OBJ
ZEND_ISSET_ISEMPTY_STATIC_PROP
Furthermore they will compile by the same function zend_compile_isset_or_empty Function is_null() is type recognizer function,
like is_numeric , is_recource , is_bool , etc. And will be called like user-defined function with opcodes INIT_FCALL_BY_NAME/DO_FCALL_BY_NAME and so. /* {{{ proto bool is_null(mixed var)
Returns true if variable is null
Warning: This function is special-cased by zend_compile.c and so is usually bypassed */
PHP_FUNCTION(is_null)
{
php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
}
by Vincy. Last modified on September 15th, 2022. PHP has multiple functions to check PHP variables with respect to their initialized values. These functions are isset, empty and is_null. - isset() is to check if a variable is set with a value and that value should not be null.
- empty() is to check if a given
variable is empty. The difference with isset() is, isset has null check.
- is_null() is to check whether a variable is defined as null.
I feel the effective way to communicate the difference would be with the help of a TRUTH TABLE,
| “”
| “apple”
| NULL
| FALSE
| 0
| undefined
| TRUE
| array()
| 123
| isset
| TRUE
| TRUE
| FALSE
| TRUE
| TRUE
| FALSE
| TRUE
| TRUE
| TRUE
| empty
| TRUE
| FALSE
| TRUE
| TRUE
| TRUE
| TRUE
| FALSE
| TRUE
| FALSE
| is_null
| FALSE
| FALSE
| TRUE
| FALSE
| FALSE
| Warning / TRUE
| FALSE
| FALSE
| FALSE
|
Ok! Now find the difference!Code to understand the differencedifference.php <?php
print "<br/>ISSET: <br/>";
$var = "";
print 'isset(""): ' . isset($var) . "<br/>";
$var = 'apple';
print "isset('apple'): " . isset($var) . "<br/>";
$var = null;
print "isset(null): " . isset($var) . "<br/>";
$var = FALSE;
print "isset(FALSE): " . isset($var) . "<br/>";
$var = 0;
print "isset(0): " . isset($var) . "<br/>";
print "isset(undefined): " . isset($var3) . "<br/>";
$var = TRUE;
print "isset(TRUE): " . isset($var) . "<br/>";
$var = array();
print "isset(array()): " . isset($var) . "<br/>";
$var = 123;
print "isset(123): " . isset($var) . "<br/>";
print "<br/>EMPTY: <br/>";
$var = "";
print 'empty(""): ' . empty($var) . "<br/>";
$var = 'apple';
print "empty('apple'): " . empty($var) . "<br/>";
$var = null;
print "empty(null): " . empty($var) . "<br/>";
$var = FALSE;
print "empty(FALSE): " . empty($var) . "<br/>";
$var = 0;
print "empty(0): " . empty($var) . "<br/>";
print "empty(undefined): " . empty($var1) . "<br/>";
$var = TRUE;
print "empty(TRUE): " . empty($var) . "<br/>";
$var = array();
print "empty(array()): " . empty($var) . "<br/>";
$var = 123;
print "empty(123): " . empty($var) . "<br/>";
print "<br/>IS_NULL: <br/>";
$var = "";
print 'is_null(""): ' . is_null($var) . "<br/>";
$var = 'apple';
print "is_null('apple'): " . is_null($var) . "<br/>";
$var = null;
print "is_null(null): " . is_null($var) . "<br/>";
$var = FALSE;
print "is_null(FALSE): " . is_null($var) . "<br/>";
$var = 0;
print "is_null('0'): " . is_null($var) . "<br/>";
print "is_null(undefined):" . is_null($var2) . "<br/>";
$var = TRUE;
print "is_null(TRUE): " . is_null($var) . "<br/>";
$var = array();
print "is_null(array()): " . is_null($var) . "<br/>";
$var = 123;
print "is_null(123): " . is_null($var) . "<br/>";
?>
Output: ISSET:
isset(""): 1
isset('apple'): 1
isset(null):
isset(FALSE): 1
isset(0): 1
isset(undefined):
isset(TRUE): 1
isset(array()): 1
isset(123): 1
EMPTY:
empty(""): 1
empty('apple'):
empty(null): 1
empty(FALSE): 1
empty(0): 1
empty(undefined): 1
empty(TRUE):
empty(array()): 1
empty(123):
IS_NULL:
is_null(""):
is_null('apple'):
is_null(null): 1
is_null(FALSE):
is_null('0'):
Notice: Undefined variable: var2 in .../index.php on line 51
is_null(undefined):1
is_null(TRUE):
is_null(array()):
is_null(123):
Differences
isset: Returns true for empty string, False, 0 or an undefined variable. Returns false for null. empty: Returns true for null, empty string, False, 0 or an undefined variable. Returns true if there is any value. is_null: Returns true for null only. Returns false in all other cases. Throws warning if the variable is undefined. If you suppress the warning, you will get true. Differences table
Value of $var | isset | empty | is_null |
---|
“” (empty string)
| true
| true
| false
| ‘apple’ (string value)
| true
| false
| false
| null (declaration-only)
| false
| true
| true
| FALSE
| true
| true
| false
| 0
| true
| true
| false
| undefined variable
| false
| true
| Warning/true
| TRUE
| true
| false
| false
| array() (empty array)
| true
| true
| false
| 123 (numeric value)
| true
| false
| false
|
References- isset PHP manual
- empty PHP manual
- is-null PHP manual
↑ Back to Top
Is empty or Isset better?
The empty() function is an inbuilt function in PHP that is used to check whether a variable is empty or not. The isset() function will generate a warning or e-notice when the variable does not exists. The empty() function will not generate any warning or e-notice when the variable does not exists.
Is NULL or empty PHP?
empty() function in PHP ? The isset() function is an inbuilt function in PHP which checks whether a variable is set and is not NULL. This function also checks if a declared variable, array or array key has null value, if it does, isset() returns false, it returns true in all other possible cases.
Is and NULL the same in PHP?
Null is just another datatype in PHP, which has only one value (null). Since PHP is a loosly typed language, it can be confusing how it handles different values. "", 0, "0", False, array(), Null are all considered False in PHP.
Does Isset check for empty string?
"isset() checks if a variable has a value including (False, 0 or empty string), but not NULL.
|