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 injection
Oct 09 PHP
风格模板初级不完全修改教程
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
详解php命令注入攻击
Apr 06 PHP
Laravel 实现数据软删除功能
Aug 21 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
Javascript Select操作大集合
2009/05/26 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Python跳出循环语句continue与break的区别
2014/08/25 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python修改列表值问题解决方案
2020/03/06 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
大四学年自我鉴定
2013/11/13 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
儿园租房协议书范本
2014/12/02 职场文书
小学教师教学随笔
2015/08/14 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
mysql函数全面总结
2021/11/11 MySQL