扫一扫浏览

php中函数 isset(), empty(), is_null() 的区别,你都理解到位了么

未结贴
0 645
yaosean未认证 2017-10-10 11:28:53
收藏

在做项目过程当中,经验会遇到判断之类的问题,其它你有很多的判断都有可能有BUG,先来看看php的 PHP type comparison tables:

NULL

当你在你的脚本中写下这样一行代码

$myvariable;   //此处你想定义一个变量,但未赋值。会有Notice: Undefined variable
echo $myvariable + 3;  //使用这个变量出现:Notice: Undefined variable: myvariable in

如果将其改写成:

$myvariable = NULL;   
echo $myvariable + 3;   //这样就不会有问题了 

所以得出在你的脚本在使用一个变量时最好赋一个默认值,如果你不想,就可以将NULL赋给变量,表示这个变量已经定义但没有值,属于NULL类型。

IS_NULL

bool is_null ( mixed $var )   (php.net官方文档的函数定义)
当参数满足下面三种情况时,is_null()将返回TRUE,其它的情况就是FALSE
1、它被赋值为NULL
2、它还没有赋值
3、它未定义,相当于unset(),将一个变量unset()后,不就是没有定义吗
让我们来看一些例子:

$myvar = NULL;   
var_dump(is_null($myvar)); // TRUE  
$myvar1;           
var_dump(is_null($myvar1)); // TRUE  Notice: Undefined variable  
$num = 520;  
unset($num);  
var_dump(is_null($num));  //TRUE Notice: Undefined variable  
var_dump(is_null($some_undefined_var)); //TRUE Notice: Undefined variable  
  
$myvar = 0; is_null($myvar);     // FALSE  
$myvar = FALSE; is_null($myvar); // FALSE  
$myvar = '';  is_null($myvar);   // FALSE  

ISSET

bool isset ( mixed $var [, mixed $... ] ),参数是一个变量
检测参数已设定,并且不是NULL。如果没有设置变量,变量未赋值,或变量被设为NULL,isset()函数就返回NULL。
正好和is_null()函数相反,is_null()为TRUE的情况在isset()中就为FALSE。有意思!
如果传递多个参数,将取交集。即所有参数全部符合 isset() 时才返回 TRUE。
似乎让人感觉有点困惑,来看一些例子:

$myvar = NULL; isset($myvar); //  FALSE 当一个变量被赋值为NULL时,就表示这个变量没有值  
$myvar = 0; isset($myvar);     //   TRUE  
$myvar = FALSE; isset($myvar); // TRUE  
$myvar = '';  isset($myvar); //  TRUE  
isset($some_undefined_var); //  FALSE Undefined variable 

可以看出isset()着重检测一个 变量是否设置和这个变量是否有具体的值,当变量满足这两种情况时isset()返回TRUE

defined

bool defined ( string $name )
检测是否设置常量

empty

bool empty ( mixed $var )
判读变量是否为空。
请见上面的类型比较表empty()那一列你就明白哪些情况是空的情形了。还有其他一些函数的参照。
来看一些例子:

$myvar = NULL; empty($myvar); // TRUE  
$myvar = 0; empty($myvar); // TRUE  
$myvar = FALSE; empty($myvar); // TRUE  
$myvar = '';  empty($myvar); // TRUE  
empty($some_undefined_var); // TRUE 

empty()为TRUE的情况,若变量不存在,或者变量存在且其值为&quot;&quot;、0、&quot;0&quot;、NULL、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE。<br data-filtered="filtered" />
一般如!empty()的判断,就是变量存在,且值不为&quot;&quot;、0、&quot;0&quot;、NULL、FALSE、array()以及只是单纯定义一个变量$var。

最近热帖 HOT TOPIC
【全套视频】thinkphp5视频教程 1264
thinkphp5隐藏默认模块的一些问题 1151
TPFrame框架robot模块重磅来袭,内附2.1版本 1078
教你如果处理高并发数据不同步的问题php篇 1077
tpframe安装教程 1067
tpframe新建主题 1015
slide模块发布 1006
tpframe应用目录结构 1001
thinkphp5自动完成操作,两次运行的详解 982
TPFrame 2.1 beta版本正式发布,全部插件式开发到来 939
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
透析thinkphp5升级版开发框架tpframe 2
爆料早知道:又拍云存储插件上线我有好想法