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 相关文章推荐
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
php的一些小问题
Jul 03 PHP
如何使用php输出时间格式
Aug 31 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php中删除、清空session的方式总结
Oct 09 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
Laravel实现批量更新多条数据
Apr 06 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
PHP简介
2006/10/09 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
关于this和self的使用说明
2010/08/01 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
详解javascript遍历方式
2015/11/11 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
Three.js基础学习教程
2017/11/16 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
python的继承知识点总结
2018/12/10 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
24式加速你的Python(小结)
2019/06/13 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
函授本科自我鉴定
2013/11/03 职场文书
医学院护理专业应届生求职信
2013/11/12 职场文书
运动会广播稿200字
2014/01/15 职场文书
音乐教学随笔感言
2014/02/19 职场文书
班长竞选演讲稿
2014/04/24 职场文书
商铺门面租房协议书
2014/10/21 职场文书
鲁迅故里导游词
2015/02/05 职场文书
感恩教育观后感
2015/06/17 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android