php中isset, empty, is_null的区别

140 阅读2分钟

php中有三个函数, 它们很容易让人混淆, 我们今天就来弄明白它们的区别.

数据类型

我们只做简单的数据类型的区别, 这个搞懂了, 对象数组也一个道理.

php的数据类型有 string, number, boolean, null, undefind 五种基础类型, 它们就是我们容易混淆的关键.

undefind: 代表没有定义变量, 也就是根本不存在的状态.

null: 当我们定义了变量, 但是不知道给变量是什么类型的时候, 就可以设置为null, 这个比undefind前进了一步.

string,number,boolean的初始值: 这三个类型大家都懂, 但是它们的初始值’’,0,false则非常关键, 是在null的基础上又进了一步, 当我们知道变量是什么类型的时候, 但是不确定给什么值得时候就可以给初始值.

string,number,boolean的常规值: 常规值没什么好说的, 就是在初始值的基础上又进了一步.

isset, empty的比较

当我们有了上面的数据类型基础后就可以讨论isset, empty, is_null的区别了.

isset: 当一个变量没定义(undefind)或者定义了但是不确定是什么类型(null), 则表示没有设置, 也就是false, 反之则是true.

empty: 当一个变量没定义(undefind)或者定义了但是不确定是什么类型(null), 又或者定义了也确定了类型但是不知道赋给什么值(’’,0,false), 则表示空, 也就是true, 反之则是false.

可以看出isset和empty是递进关系, 可以理解为empty是isset的增强. 下面是对比的代码:


// isset的测试

<?php

isset($var); //false

$var = null;
isset($val); //false

$var = '';
isset($val); //true

$var = 0;
isset($val); //true

$var = false;
isset($val); //true


// empty的测试

empty($var); //true

var=null;empty(var = null; empty(val); //true

var=;empty(var = ''; empty(val); //true

var=0;empty(var = 0; empty(val); //true

var=false;empty(var = false; empty(val); //true


is\_null
--------

好了, 现在可以说is\_null了, 其实is\_null和isset, empty不是一个层次的, is\_nullis\_boolean, is\_int等函数才是一个层次.

`is_null`: 如果变量没定义, 直接报错; 如果变量定义了但是不知道什么类型(null), 则是true; 其他情况都是false.

//is_null测试

is_null($var); //Undefined variable异常

var=null;isnull(var=null; is_null(var); //true


文章首发于: [https://w2fenx.com/308.html](https://w2fenx.com/308.html)