扫一扫浏览

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

未结贴
0 930
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
父元素flex之后,子元素高度自适应问题 2563
thinkphp5隐藏默认模块的一些问题 2219
关于thinkphp5.0.x getshell漏洞的说明 1893
【全套视频】thinkphp5视频教程 1859
教你如果处理高并发数据不同步的问题php篇 1783
移动web资源整理,你值得收藏的干货 1764
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 1686
PHP如何判断字符串是否为json格式 1657
tpframe新建主题 1603
omnicore rpc api中文手册【usdt】 1573
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2
thinkphp5隐藏默认模块的一些问题 2
tpframe-curd操作之添加数据 2
爆料早知道:Tcms微信、百度小程序、微信公众号功能已全部上线我有好想法