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
Mysql的常用命令
Oct 09 PHP
php 错误处理经验分享
Oct 11 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
php树型类实例
Dec 05 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
php异常处理捕获错误整理
Sep 23 PHP
基于laravel where的高级使用方法
Oct 10 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
详解php反序列化
Jun 10 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
关于文本留言本的分页代码
2006/10/09 PHP
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
实用函数3
2007/11/08 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
babel基本使用详解
2017/02/17 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
JS中的BOM应用
2018/02/02 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python中循环语句while用法实例
2015/05/16 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python实现截屏的函数
2015/07/26 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
求职简历中个人的自我评价
2013/12/01 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
研究生导师推荐信
2014/09/06 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
python实现会员信息管理系统(List)
2022/03/18 Python