PHP:变量空或未设置或什么?

caw*_*caw 9 php variables conditional

这四个PHP语句有什么区别?

if (isset($data)) {

if (!empty($data)) {

if ($data != '') {

if ($data) {
Run Code Online (Sandbox Code Playgroud)

他们都这样做吗?

jlb*_*jlb 22

查看PHP手册: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

如您所见,if(!empty($x))等于if($x)if(!is_null($x))等于if(isset($x)).作为仿佛远$data != ''去,它是TRUE如果$data不是NULL,'',FALSE0(松散比较).


hsz*_*hsz 9

if (isset($data)) {  
Run Code Online (Sandbox Code Playgroud)

变量刚刚设置 - 在该行之前我们声明了名为'data'的新变量,即$ data ='abc';

if (!empty($data)) {  
Run Code Online (Sandbox Code Playgroud)

变量充满了数据.它不能有空数组,因为它$data有数组类型但仍然没有数据,即$ data = array(1); 不能为null,空字符串,空数组,空对象,0等.

if ($data != '') {  
Run Code Online (Sandbox Code Playgroud)

变量不是空字符串.但也不能是空值(以上例子).
如果我们想比较类型,请使用!=====.

if ($data) {  
Run Code Online (Sandbox Code Playgroud)

变量填充任何数据.同样的事情!empty($data).