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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
转PHP手册及PHP编程标准
Dec 17 PHP
php 设计模式之 工厂模式
Dec 19 PHP
php简单提示框alert封装函数
Aug 08 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php session 写入数据库
Feb 13 PHP
php cookie工作原理与实例详解
Jul 18 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
PHP 断点续传实例详解
Nov 11 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
Yii 实现数据加密和解密
Mar 09 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/09/05 PHP
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
webpack优化的深入理解
2018/12/10 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
python调用百度语音识别api
2018/08/30 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
python 通过exifread读取照片信息
2020/12/24 Python
ASP.NET Core中的配置详解
2021/02/05 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
毕业生个人投资创业计划书
2014/01/04 职场文书
小学防溺水制度
2014/01/29 职场文书
自我查摆剖析材料
2014/10/11 职场文书
社区党员干部承诺书
2015/05/04 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android