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 相关文章推荐
php防盗链的常用方法小结
Jul 02 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP页面中文乱码分析
Oct 29 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
python获取文件扩展名的方法
2015/07/06 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
民事诉讼代理授权委托书
2014/10/11 职场文书
公司内部升职自荐信
2015/03/27 职场文书
道士塔读书笔记
2015/06/30 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
倡议书怎么写?
2019/04/11 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL