世界快播:php中empty方法,关于php的empty函数

2022-09-15 13:55:29来源:互联网  


(资料图)

最近在学习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) {}

相关阅读

精彩推荐

相关词

推荐阅读