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 OPCode缓存 APC详细介绍
Oct 12 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
php去除html标记的原生函数详解
Jan 27 PHP
PHP实现事件机制实例分析
Jun 26 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
php封装的表单验证类完整实例
Oct 19 PHP
浅谈PHP错误类型及屏蔽方法
May 27 PHP
php 猴子摘桃的算法
Jun 20 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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中in_array函数使用的问题与解决办法
2016/09/11 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Python 中的with关键字使用详解
2016/09/11 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
Python中的取模运算方法
2018/11/10 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
金融专业应届生求职信
2013/11/02 职场文书
物流管理应届生求职信
2013/11/07 职场文书
会计找工作求职信范文
2013/12/09 职场文书
保护水资源的标语
2014/06/17 职场文书
支部书记四风对照材料
2014/08/28 职场文书
刮痧观后感
2015/06/05 职场文书
法定代表人资格证明书
2015/06/18 职场文书
班级班风口号大全
2015/12/25 职场文书