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
Nov 25 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
php array_intersect()函数使用代码
Jan 14 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
Laravel框架搜索分页功能示例
Feb 01 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常用正则表达式集锦
2014/08/17 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php常用表单验证类用法实例
2015/06/18 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
vue-cli之router基本使用方法详解
2017/10/17 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
深入浅析Python字符编码
2015/11/12 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python使用配置文件过程详解
2019/12/28 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
大四本科生的自我评价
2013/12/30 职场文书
js之ajax文件上传
2021/05/13 Javascript
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫