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 相关文章推荐
实用函数2
Nov 08 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
PHP的全局错误处理详解
Apr 25 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
php中JSON的使用与转换
2015/01/14 PHP
php创建session的方法实例详解
2015/01/27 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python编程中的异常处理教程
2015/08/21 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
django允许外部访问的实例讲解
2018/05/14 Python
python实现简单flappy bird
2018/12/24 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
教师推荐信范文
2013/11/24 职场文书
信用卡工作证明模板
2014/09/14 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
《青山不老》教学反思
2016/02/22 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python