php empty,isset,is_null判断比较(差异与异同)


Posted in PHP onOctober 19, 2010

一、举例说明
A.一个变量没有定义,我们该怎么样去判断呢

<?php 
#不存在$test 变量 $isset= isset($test)?"test is define!":"test is undefine!"; 
echo "isset:$isset\r\n"; 
$empty=!empty($test)?"test is define!":"test is undefine!"; 
echo "empty:$empty\r\n"; 
$is_null=is_null($test)?"test is define!":"test is undefine!"; 
echo "is_null:$is_null\r\n";

测试结果是:
php empty,isset,is_null判断比较(差异与异同)

结果出来了:empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!

B、看下各自接收的参数是什么?

isset函数参数:

<?php
$test=100;
echo isset($test),isset(100),$isset($b=100);

 

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />

empty函数参数:

<?php
$test=100;

echo empty($test),empty(100),empty($b=100);

 

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />

is_null函数参数:

<?php
$test=100;

echo is_null($test),is_null(100),is_null($b=100);

运行结果:没有任何错误。

比较结果出来了:empty,isset输入参数必须是一个变量(php变量是以$字符开头的),而is_null输入参数只要是能够有返回值就可以。(常量,变量,表达式等)。在php手册里面,对于他们解析是:empty,isset 是一个语言结构而非函数,因此它无法被变量函数调用。

二、概括总结isset,empty,is_null区别:
刚才介绍的:检查变量,以及参数类型,这个是这3个函数不同之处的基础,也是最容易被忽视的。看到网上有很多对这个3个函数进行比较文章。很少涉及这些。下面我要说的,是在都检查已存在变量情况下,不同之处。

实例:

<?php 
$a=100; 
$b=""; 
$c=null; 
//isset检查 
echo "isset","\$a=$a",isset($a)?"define":"undefine","\r\n"; 
echo "isset","\$b=$b",isset($b)?"define":"undefine","\r\n"; 
echo "isset","\$c=$c",isset($c)?"define":"undefine","\r\n"; 
unset($b); 
echo "isset","\$b",isset($b)?"define":"undefine","\r\n"; 
$b=0; 
echo "\r\n\r\n"; //empty检查 
echo "empty","\$a=$a",!empty($a)?"no empty":"empty","\r\n"; 
echo "empty","\$b=$b",!empty($b)?"no empty":"empty","\r\n"; 
echo "empty","\$c=$c",!empty($c)?"no empty":"empty","\r\n"; 
unset($b); 
echo "empty","\$b",!empty($b)?"no empty":"empty","\r\n"; 
$b=0; 
echo "\r\n\r\n"; 
//is_null检查 
echo "is_null","\$a=$a",!is_null($a)?"no null":"null","\r\n"; 
echo "is_null","\$b=$b",!is_null($b)?"no null":"null","\r\n"; 
echo "is_null","\$c=$c",!is_null($c)?"no null":"null","\r\n"; 
unset($b); 
echo "is_null","\$b",is_null($b)?"no null":"null","\r\n";

php empty,isset,is_null判断比较(差异与异同)
通过上面这个简单测试,我们可以大体知道,当一个变量存在情况下:isset,empty,is_null检测,得到值情况了。上面没有举例更多变量。其实测试发现:

empty

如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var、未定义; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

isset

如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

is_null

检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】.

疑问:怎么样判断一个变量被设置了,并且值为NULL呢?

通过上面比较,估计大家与我一样,会有这个问题浮现在脑海里面。 检测一个变量是否是null 可以用:is_null,但如果变量未定义用它检测会出错。因此,我们想到,检测变量是否定义可以用:isset,但是如果一个变量值是:null, 则它会返回false . 哈哈,这个问题怎么样解决呢?等待大家分享……

检查变量存在,并且值为NULL.

<?php 
function checkNull($a) 
{ 
if(array_key_exists($a,$GLOBALS)) 
{ 
global $$a; 
if(is_null($$a)) 
return true; 
} 
return false; 
} 
$test=null; 
var_dump(checkNull("test")); 
var_dump(checkNull("test1"));
PHP 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
关于php循环跳出的问题
Jul 01 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
Yii使用技巧大汇总
Dec 29 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
学习php笔记 字符串处理
Oct 19 #PHP
PHP 函数执行效率的小比较
Oct 17 #PHP
PHP类中Static方法效率测试代码
Oct 17 #PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 #PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 #PHP
php中去除所有js,html,css代码
Oct 12 #PHP
PHP入门学习笔记之一
Oct 12 #PHP
You might like
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
JS分页效果示例
2013/10/11 Javascript
jquery动态添加option示例
2013/12/30 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
python中readline判断文件读取结束的方法
2014/11/08 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
python解析xml简单示例
2019/06/21 Python
python 实现单例模式的5种方法
2020/09/23 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
广州盈通面试题
2015/12/05 面试题
实习生自荐信范文分享
2013/11/27 职场文书
大型晚会策划方案
2014/02/06 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
军训个人总结
2015/03/03 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python