php中有三个函数, 它们很容易让人混淆, 我们今天就来弄明白它们的区别.
数据类型
我们只做简单的数据类型的区别, 这个搞懂了, 对象数组也一个道理.
php的数据类型有 string, number, boolean, null, undefind 五种基础类型, 它们就是我们容易混淆的关键.
undefind
: 代表没有定义变量, 也就是根本不存在的状态.(www.hedaoshe.com)
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($val); //true
$var = '';
empty($val); //true
$var = 0;
empty($val); //true
$var = false;
empty($val); //true
is_null
好了, 现在可以说is_null了, 其实is_null和isset, empty不是一个层次的, is_null和is_boolean, is_int等函数才是一个层次.
is_null
: 如果变量没定义, 直接报错; 如果变量定义了但是不知道什么类型(null), 则是true; 其他情况都是false.
//is_null测试
is_null($var); //Undefined variable异常
$var=null;
is_null($var); //true