扫一扫浏览

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

未结贴
0 749
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隐藏默认模块的一些问题 1795
父元素flex之后,子元素高度自适应问题 1747
【全套视频】thinkphp5视频教程 1622
教你如果处理高并发数据不同步的问题php篇 1463
关于thinkphp5.0.x getshell漏洞的说明 1409
tpframe新建主题 1332
tpframe安装教程 1310
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 1306
TPFrame框架robot模块重磅来袭,内附2.1版本 1303
移动web资源整理,你值得收藏的干货 1290
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 4
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
爆料早知道:Tcms小程序功能已上线我有好想法