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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
php 数组的指针操作实现代码
Feb 08 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP临时文件的安全性分析
Jul 04 PHP
php内存缓存实现方法
Jan 24 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
日本十大惊悚动漫
2020/03/04 日漫
网络资源
2006/10/09 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
清空上传控件input file的值
2010/07/03 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python中实现控制小数点位数的方法
2019/01/24 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Python基于requests库爬取网站信息
2020/03/02 Python
python 爬虫请求模块requests详解
2020/12/04 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
水务局局长岗位职责
2013/11/28 职场文书
水电工岗位职责
2014/02/12 职场文书
早会主持词
2014/03/17 职场文书
财务管理专业求职信
2014/06/11 职场文书
个人政治思想总结
2015/03/05 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
windows安装python超详细图文教程
2021/05/21 Python
Python使用Kubernetes API访问集群
2021/05/30 Python
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android