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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
基于php iconv函数的使用详解
Jun 09 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
php中关于socket的系列函数总结
May 18 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
php格式化json函数示例代码
May 12 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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/04/13 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
PDO::_construct讲解
2019/01/27 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
js实现随机抽奖
2020/03/19 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
应届毕业生求职信范文
2013/12/18 职场文书
30岁生日感言
2014/01/25 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2014年导购员工作总结
2014/11/18 职场文书
明星邀请函
2015/02/02 职场文书
幼师自荐信范文
2015/03/06 职场文书
给下属加薪申请报告
2015/05/15 职场文书
民主生活会主持词
2015/07/01 职场文书
送给客户微信问候语!
2019/07/04 职场文书