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 14 PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
关于尾递归的使用详解
May 02 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
php session_decode函数用法讲解
2019/05/26 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python中操作MySQL入门实例
2015/02/08 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
敬老月活动总结
2014/08/28 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
创先争优活动个人总结
2015/03/04 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers