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和ACCESS写聊天室(三)
Oct 09 PHP
php 无限级 SelectTree 类
May 19 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
Dec 08 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
解决php extension 加载顺序问题
Aug 16 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
PHP7 标准库修改
Mar 09 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
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python中的ceil()方法使用教程
2015/05/14 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
python zip()函数使用方法解析
2019/10/31 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
关于感恩的演讲稿400字
2014/08/26 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
倡议书范文大全
2015/04/28 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书