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新手上路(八)
Oct 09 PHP
PHP 中的批处理的实现
Jun 14 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
ThinkPHP之getField详解
Jun 20 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP中关于php.ini参数优化详解
Feb 28 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 第三节 变量介绍
2012/04/28 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP简单遍历对象示例
2016/09/28 PHP
写自已的js类库需要的核心代码
2012/07/16 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
javascript生成大小写字母
2015/07/03 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
简述vue中的config配置
2018/01/23 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
让python json encode datetime类型
2010/12/28 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
对Python 内建函数和保留字详解
2018/10/15 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
快速查找Python安装路径方法
2020/02/06 Python
Django中的AutoField字段使用
2020/05/18 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
材料专业大学毕业生自荐书
2014/07/02 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
2014年财政所工作总结
2014/11/22 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
教师节班会开场白
2015/06/01 职场文书
Python四款GUI图形界面库介绍
2022/06/05 Python