Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: Variable empty or not set or what?

What is the difference between these four PHP statements?

if (isset($data)) {

if (!empty($data)) {

if ($data != '') {

if ($data) {

Do they all do the same?

like image 641
caw Avatar asked Dec 08 '09 20:12

caw


2 Answers

if (isset($data)) {  

Variable is just set - before that line we declared new variable with name 'data', i.e. $data = 'abc';

if (!empty($data)) {  

Variable is filled with data. It cannot have empty array because then $data has array type but still has no data, i.e. $data = array(1); Cannot be null, empty string, empty array, empty object, 0, etc.

if ($data != '') {  

Variable is not an empty string. But also cannot be empty value (examples above).
If we want to compare types, use !== or ===.

if ($data) {  

Variable is filled out with any data. Same thing as !empty($data).

like image 168
hsz Avatar answered Sep 18 '22 17:09

hsz


Check PHP manual out: http://www.php.net/manual/en/types.comparisons.php

Expression  gettype() empty() is_null() isset() if($x)
$x = "";        string  TRUE    FALSE   TRUE    FALSE
$x = null;      NULL    TRUE    TRUE    FALSE   FALSE
var $x;         NULL    TRUE    TRUE    FALSE   FALSE
$x undefined    NULL    TRUE    TRUE    FALSE   FALSE
$x = array();   array   TRUE    FALSE   TRUE    FALSE
$x = false;     boolean TRUE    FALSE   TRUE    FALSE
$x = true;      boolean FALSE   FALSE   TRUE    TRUE
$x = 1;         integer FALSE   FALSE   TRUE    TRUE
$x = 42;        integer FALSE   FALSE   TRUE    TRUE
$x = 0;         integer TRUE    FALSE   TRUE    FALSE
$x = -1;        integer FALSE   FALSE   TRUE    TRUE
$x = "1";       string  FALSE   FALSE   TRUE    TRUE
$x = "0";       string  TRUE    FALSE   TRUE    FALSE
$x = "-1";      string  FALSE   FALSE   TRUE    TRUE
$x = "php";     string  FALSE   FALSE   TRUE    TRUE
$x = "true";    string  FALSE   FALSE   TRUE    TRUE
$x = "false";   string  FALSE   FALSE   TRUE    TRUE

As you can see, if(!empty($x)) is equal to if($x) and if(!is_null($x)) is equal to if(isset($x)). As far as if $data != '' goes, it is TRUE if $data is not NULL, '', FALSE or 0 (loose comparison).

like image 32
jlb Avatar answered Sep 19 '22 17:09

jlb