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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
PHP 面向对象实现代码
Nov 11 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
开启PHP的伪静态模式
Dec 31 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js中document.write的那点事
2014/12/12 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
Vue 组件注册全解析
2020/12/17 Vue.js
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
Python合并字符串的3种方法
2015/05/21 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Pycharm Git 设置方法
2020/09/15 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
2015年度党员自我评价范文
2015/03/03 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
Golang Web 框架Iris安装部署
2022/08/14 Python