最近在学习php的时候发现在php中进行判空操作的时候使用的是一个empty()函数。刚看的时候觉得这个方法很简单,就是判断变量对应类型的空值,后来在使用的时候发现自己想的太简单了,这个方法还是很有学问的,这里记录一下这个方法的详细用法,以及准备对比整理两个相似的方法isset()以及is_null()方法。

empty()函数

empty()方法的定义以及注释如下:/**

* Determine whether a variable is considered to be empty. A variable is considered empty if it does not exist or if its value

* equals FALSE. empty() does not generate a warning if the variable does not exist.

* @link https://php.net/manual/en/function.empty.php

* @param mixed $var

Variable to be checked.

*

Note: Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words,

* the following will not work: empty(trim($name)). Instead, use trim($name) == false.

*

*

* No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent

* to !isset($var) || $var == false.

*

* @return bool

FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.

*

* The following things are considered to be empty:

*

*

"" (an empty string)

*

0 (0 as an integer)

*

0.0 (0 as a float)

*

"0" (0 as a string)

*

NULL

*

FALSE

*

array() (an empty array)

*

$var; (a variable declared, but without a value)

*

*

*/

function PS_UNRESERVE_PREFIX_empty($var){};

其实注释已经说得很明白了,这里又要反思自己身上一个不好的习惯了,那就是不习惯看源码。现在的IDE点一下就可以直接跳转去看相应的源码,而自己还习惯于在网上查找,网上的讲解往往很零散,并且每个人在讲解的时候都加了自己的理解与看法,这样反而不利于自己的理解。

好了说了这么多废话,继续回到empty()本身,什么时候一个变量会被判断为‘empty’,也就是empty()会返回true呢?如果一个变量不存在或者这个变量的值等于其类型零值的话,empty()函数就会返回true!。注释中还列出了具体的会被判断为‘empty’的所有情况,可以分为两类:变量不存在或者变量的值为类型零值,即:

(一)变量不存在

包括两种情况:一个变量不存在,即这个变量重来没有被声明过就直接塞给empty函数了;

一个变量只是被声明但是还没有被赋值;// 变量不存在

empty($var1); // return true

// 变量只声明没赋值

$var2;

empty($var2); // return true

(二)变量值为零值

即每种数据类型对应的零值,具体为:int: 0

boolean: false

float: 0.0

string: “” and “0” ;

array: array()

object: null

字符串类型稍特殊一点,”0”也会被判断为empty; 但是两个或者以上的全‘0’字符串又会判断为非空,暂时还没有理解到这样规定的意义所在。

另外php的版本也会对empty()函数产生影响,注释里面说php5.5之前empty()方法只能检验变量,对常量使用的话会产生错误,而在php5.5之后也可以检验常量,这点等换了电脑之后再验证。

isset()函数

在上面的注释中有这样一句话:

No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent to !isset($var) || $var == false.

意思就是说 empty() 等价于 !isset($var) || $var == false

先看一下函数的定义以及注释:/**

*

Determine if a variable is set and is not NULL.

*

If a variable has been unset with unset(), it will no longer be set. isset() will return FALSE if testing a variable

* that has been set to NULL. Also note that a null character (" ") is not equivalent to the PHP NULL constant.

*

If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set.

* Evaluation goes from left to right and stops as soon as an unset variable is encountered.

* @link https://php.net/manual/en/function.isset.php

* @param mixed $var

The variable to be checked.

* @param mixed $_ [optional]

Another variable ...

* @return bool Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

*/

function PS_UNRESERVE_PREFIX_isset($var, ...$_){};

注释说的很明白了,isset()用来检测一个变量是否已经声明并且其值不为NULL。有以下几种情况:若变量不存在,返回 FALSE

若变量存在并且值为NULL,返回 FALSE

若变量存在且值不为NULL,返回 TUREisset($var1); //return false

$var2 = null;

isset($var2); //return false

$var3 = 0; // 赋值过

isset($var3); // return true

unset($var4); // 释放变量

isset($var4); // return false

并且isset()支持同时检查多个变量,只有当每一个变量都符合上述返回true的条件的时候,整个方法才返回TRUE,也就是一个&&的关系。

这里要强调的一点就是isset()只适用于变量,用来检验常量的会报错。要检验常量可以使用defined()方法。

is_null()函数

从函数意义上is_null()函数就是isset()方法的反函数,对比理解就行了。

从用法上is_null()函数只能作用于已经声明的变量,对未声明的变量使用会报错的,这和isset()方法有差别。/**

* Finds whether a variable is &null;

* @link https://php.net/manual/en/function.is-null.php

* @param mixed $var

* The variable being evaluated.

*

* @return bool true if var is null, false

* otherwise.

* @since 4.0.4

* @since 5.0

*/

function is_null ($var) {}

php中empty方法,关于php的empty函数相关推荐

  1. php中change方法的使用,jQuery.change()函数的使用详解

    change()函数用于为每个匹配元素的change事件绑定处理函数.该函数也可用于触发change事件.此外,你还可以额外传递给事件处理函数一些数据. change事件会在文本内容或选项被更改时触发 ...

  2. java empty isempty_Java中isEmpty方法如何使用?

    展开全部 isEmpty()方法有很多类都有,对于String类,62616964757a686964616fe4b893e5b19e31333264656134它是Java 6.0引入的, 当且仅当 ...

  3. java的empty_Java Stack empty()方法与示例

    堆栈类empty()方法empty()方法在java.util包中可用. empty()方法用于检查此堆栈是否为空. empty()方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方 ...

  4. string empty java,在C#中,我应该使用string.Empty还是String.Empty或“”来初始化字符串?...

    在C#中,我想用一个空字符串初始化一个字符串值. 我应该怎么做? 正确的方法是什么,为什么? string willi = string.Empty; 要么 string willi = String ...

  5. jquery 删除html属性值,使用jQuery的remove()和empty()方法删除Html元素及子元素和内容...

    01第1节. jQuery删除元素和内容 #JavaScript#在jQuery中,不仅可以在已有Html页面中添加新的Html元素,还可以删除已有的Html元素. 在jQuery中有2个方法可以完成 ...

  6. java stack empty_java.util.Stack.empty()方法实例

    全屏 empty()方法是用来测试堆栈是否为空. 声明 以下是java.util.Stack.empty()方法的声明.public boolean empty() 参数NA 返回值 该方法调用返回t ...

  7. jquery之empty()方法详解

    empty()函数用于清空每个匹配元素内的所有内容. empty()函数将会移除每个匹配元素的所有子节点(包括文本节点.注释节点等所有类型的节点). 该函数属于jQuery对象(实例). 语法 jQu ...

  8. php的empty方法怎么用js写,jQuery.empty() 函数用法详解

    empty()函数用于清空每个匹配元素内的所有内容. empty()函数将会移除每个匹配元素的所有子节点(包括文本节点.注释节点等所有类型的节点). 该函数属于jQuery对象(实例). 语法 jQu ...

  9. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

最新文章

  1. 计算机学院杨洋,美国莱特州立大学吴志强教授访问计算机科学与技术学院
  2. 关于struts2的开始学习
  3. 转:Ubuntu中安装和配置 Java JDK,并卸载自带OpenJDK(以Ubuntu 14.04为例)
  4. 应该知道的Linux技巧
  5. RNN以及LSTM的介绍和公式梳理
  6. 利用类的反射导入excel示例
  7. PHP-代码审计-命令执行
  8. 删除对于job收缩日志失败547_MySQL中常见的几种日志
  9. js 图片压缩上传(base64位)以及上传类型分类
  10. 换一种方式“写代码 编程序“,为自己的程序生涯找条新路
  11. Hibernate 系列 02 - Hibernate介绍及其环境搭建
  12. sql 没有调试 菜单_关于ThinkPHP5.1+的Log无法记录SQL调试记录的小经历
  13. odoo pivot中去掉求和_评比算分,去掉最高分和最低分算平均,PLC怎样编程实现?...
  14. React 进修之路(1)
  15. Helm 安装 nginx-ingress 的方法
  16. Cannot load supported formats: Cannot run program svn: CreateProcess error=2, μ
  17. Python数据分析与应用(一)
  18. HTML iframe设置背景透明
  19. matlab仿真整流电路设计,整流电路MATLAB仿真实验
  20. HEER-Easing Embedding Learning by Comprehensive Transcription of Heterogeneous Information Networks

热门文章

  1. 计算机毕业设计springboot+vue文体用品商城网站
  2. 苹果,游戏手柄应该被推出
  3. android fun os,FuntouchOS10,横空出世,操作体验不输EMUI和MIUI
  4. matlab图片大小剪切
  5. linux系统调用追踪及调试
  6. Python北理工_turtle绘画
  7. 一加10pro参数配置
  8. 区块链开发公司 区块链应用落地为何能成为焦点?
  9. 计算机学院志愿者组织名称,计算机学院青年志愿者招募令
  10. k-means算法、性能及优化