跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

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

未结贴
0 5068
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视频教程 87031
父元素flex之后,子元素高度自适应问题 10945
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 9936
thinkphp5隐藏默认模块的一些问题 9504
api接口文档插件easydoc的基本用法,快速搞定接口文档 9461
PHP如何判断字符串是否为json格式 9198
omnicore rpc api中文手册【usdt】 9183
教你如果处理高并发数据不同步的问题php篇 9043
关于thinkphp5.0.x getshell漏洞的说明 8859
使用宝塔linux面板创建FTP无法连接的解决办法(阿里云或腾讯云) 8742
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 71
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: