PHP空值检测函数与方法汇总


Posted in PHP onNovember 19, 2017

几乎任何入口的HTTP请求我们都会去检测它携带的参数,类似 isset() empty() 的函数一定不少见。
以下的测试结果基于 PHP7.16

是否定义判断: isset()

可以使用 isset() 函数判断一个变量是否定义,数组内某个元素是否被初始化,它的效率比 array_key_exists() 高4倍左右

$a = 'test';
$b = array('key1' => 'value1');
$class = new stdClass();
var_dump(isset($class->test->test)); // 判断对象属性是否定义:输出 bool(false)
var_dump(isset($a)); // 判断变量是否定义:输出 bool(true)
var_dump(isset($c)); // 判断变量是否定义:输出 bool(false)
var_dump(isset($b['key1'])); // 判断数组元素是否定义:输出 bool(true)
var_dump(isset($b['key2'])); // 判断数组元素是否定义:输出 bool(false)

是否为空判断:empty()

empty() 函数, 检测变量是否为空
任何一个未初始化的量,0,false,空字符串,null,空数组,使用 empty 判断都会返回 true

var_dump(empty($c));     // 输出 bool(true)
var_dump(empty($b['key2'])); // 输出 bool(true)
var_dump(empty($class));   // 输出 bool(false)
var_dump($class);       // 输出 object(stdClass)#1 (0) {}
var_dump(empty($class->test->test)); // 输出 bool(true)
class EmptyClass{};
$empty_class = new EmptyClass();
var_dump(empty($empty_class));// 输出 bool(false)

null == $var 判断

除了判断未定义的变量会报错外,和 empty 判断一样,0,false,空数组等都会返回 true,实质是 == 表达式会对两边的变量做自动类型转换,所以判断结果为 true。

is_null判断

单变量赋值为 null 或者 NULL时,判断结果 true,其他情况为 false,如果变量未定义,则会报错

null === $var 判断

表达式: === 为强制类型检测,不仅会检测表达式两边变量的值,还会检测变量的类型,都相等才会返回true。

0 === $var : 检测是否为 0
false === $var:检测是否为 false
null === $var: 检测是否为 null
'' === $var:检测是否为空字符串,包含任意字符都返回 false,如空格字符,\0
使用 === 能够很好的区分空字符串,0,false和null,甚至连整形和浮点型都能区分。

$zero_int = 0;
$zero_bool = false;
$zero_double = 0.0;
$zero_null = null;
$zero_str = '';
var_dump(0 === $zero_int);   // 输出 bool(true)
var_dump(0 === $zero_bool);  // 输出 bool(false)
var_dump(0 === $zero_double); // 输出 bool(false)
var_dump(0 === $zero_null);  // 输出 bool(false)
var_dump(0 === $zero_str);   // 输出 bool(false)
var_dump('' === $zero_str);  // 输出 bool(true)
var_dump('' === $zero_int);  // 输出 bool(false)
var_dump('' === $zero_bool);  // 输出 bool(false)
var_dump(0.0 === $zero_double);// 输出 bool(true)
var_dump(0.0 === $zero_int);  // 输出 bool(false)
PHP 相关文章推荐
smarty的保留变量问题
Oct 23 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 #PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 #PHP
swoole和websocket简单聊天室开发
Nov 18 #PHP
php单元测试phpunit入门实例教程
Nov 17 #PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 #PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 #PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 #PHP
You might like
用PHP实现小型站点广告管理
2006/10/09 PHP
How do I change MySQL timezone?
2008/03/26 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
高一英语教学反思
2014/01/22 职场文书
心理健康课教学反思
2014/02/13 职场文书
2014年师德承诺书
2014/05/23 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
公务员考察材料范文
2014/12/23 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python