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
介绍几个array库的新函数 php
Dec 29 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
laravel 判断查询数据库返回值的例子
Oct 11 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获取YouTube视频信息的方法
2015/02/11 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python列表对象实现原理详解
2019/07/01 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python ORM编程基础示例
2020/02/02 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
简单而又朴实的个人求职信分享
2013/12/12 职场文书
报关专员求职信范文
2014/02/22 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
民事起诉书范本
2015/05/19 职场文书
大学生十八大感想
2015/08/11 职场文书
python实现高效的遗传算法
2021/04/07 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python