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模拟SQL Server的两个日期处理函数
Oct 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
php异步多线程swoole用法实例
Nov 14 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
php实现购物车功能(上)
Jul 23 PHP
Django 中 cookie的使用
Aug 17 PHP
详细解读php的命名空间(二)
Feb 21 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
php把文件设置为插件的技巧方法
Feb 03 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
php简单获取目录列表的方法
2015/03/24 PHP
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
bpython 功能强大的Python shell
2016/02/16 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
助人为乐模范事迹材料
2014/06/02 职场文书
邀请函怎么写
2015/01/30 职场文书
2015初中团委工作总结
2015/07/28 职场文书
心理健康教育主题班会
2015/08/13 职场文书
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫