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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
php中目录,文件操作详谈
Mar 19 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
php GUID生成函数和类
Mar 10 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
php微信公众平台开发类实例
Apr 01 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
PHP数组array类常见操作示例
May 15 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
php header()函数使用说明
2008/07/10 PHP
PHP数组实例总结与说明
2011/08/23 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
大学自我鉴定范文
2013/12/26 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
老公保证书范文
2014/04/29 职场文书
论文诚信承诺书
2014/05/23 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
主持人大赛开场白
2015/05/29 职场文书
村主任当选感言
2015/08/01 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers