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 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
提升PHP执行速度全攻略(上)
Oct 09 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
解析php类的注册与自动加载
Jul 05 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
PHP共享内存用法实例分析
Feb 12 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
php反射学习之依赖注入示例
Jun 14 PHP
php swoft框架实例用法
Dec 22 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php 上传功能实例代码
2010/04/13 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
学习vue.js计算属性
2016/12/03 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
你应该知道的python列表去重方法
2017/01/17 Python
Django的信号机制详解
2017/05/05 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
C#面试题
2016/05/06 面试题
体育教育专业自荐信范文
2013/12/20 职场文书
烟台的海导游词
2015/02/02 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
python 离散点图画法的实现
2022/04/01 Python