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
一个数据采集类
Feb 14 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP处理会话函数大总结
Aug 05 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 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
JAVA/JSP学习系列之六
2006/10/09 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
Python多线程下载文件的方法
2015/07/10 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
jupyter实现重新加载模块
2020/04/16 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
临床护士自荐信
2014/01/31 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
农村党员一句话承诺
2014/05/30 职场文书
大学同学聚会感言
2015/07/30 职场文书
高中班主任培训心得体会
2016/01/07 职场文书