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新手上路(十二)
Oct 09 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
php删除数组元素示例分享
Feb 17 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
Laravel实现ORM带条件搜索分页
Oct 24 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
python文件的md5加密方法
2016/04/06 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
师范大学应届生求职信
2013/11/21 职场文书
土建资料员岗位职责
2014/01/04 职场文书
创新比赛获奖感言
2014/02/13 职场文书
年终总结会主持词
2014/03/25 职场文书
2015政治思想表现评语
2015/03/25 职场文书
放假通知范文
2015/04/14 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
入党培养人考察意见
2015/06/08 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
关于Javascript闭包与应用的详解
2021/04/22 Javascript
python开发实时可视化仪表盘的示例
2021/05/07 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技