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用数组返回无限分类的列表数据的代码
Aug 08 PHP
PHP获取url的函数代码
Aug 02 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
php利用gd库为图片添加水印
Nov 09 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
laravel框架中间件简单使用方法示例
Jan 25 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 cc攻击代码与防范方法
2012/10/18 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
python三元运算符实现方法
2013/12/17 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
房地产财务部员工岗位职责
2014/03/12 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
MySQL8.0的WITH查询详情
2021/08/30 MySQL
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫