如果 var 是非空或非零的值,则 empty() 返回 FALSE。

换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。

PHP中有很多函数功能类似,却有着细微的差别...
is_null, empty, isset, unset 我们先来看看这4个函数的描述。
isset 判断变量是否已存在(配置)
unset 把变量删除(释放)掉
empty 判断变量是否为空
is_null 判断变量是否为NULL
ok,已经开始搞人了。那么开始,这4个函数中除了unset,其他3个都是判断函数,unset首先出局,因为他不会搞错,其次是is_null,我们可以把它看成是!isset,是isset的一个逆操作,下面一张表可以很清楚的说明他们之间的关系:
变量          empty          is_null          isset
$a=””          true            false           true
$a=null        true            true           false
var $a         true            true            false
$a=array()   true            false           true
$a=false      true            false           true
$a=15         false           false           true
$a=1           false           false           true
$a=0           true            false           true
$a=”0”        true            false            true
$a=”true”    false            false           true
$a=”false”    false            false           true

从中我们可以发现只要变量是否为" "或者0,或者是false和null,只要是这些值empty都会返回true,而isset是判断变量是否存在,只要你这个变量不是null或未赋值,返回结果都是true,而is_null正好是isset的反结果。

从这个图中,可以很清楚的看到一种联系:
假设 $var 是任何type。
当 empty($var) 为 true 时, (bool)($var) 为 false 。反之亦然。
同样,
当 is_null($var) 为 true 时, isset($var) 为 false 。反之亦然。

假如:
$i=$j+1;
这里的is_null($j)为true

可见:
isset用于判断未定义的情况。
Empty可以判断未定义和已定义,但是为空,为0的情况。
Is_null可以看做是isset的反函数
If($表达式)可以看做是empty的反函数
当要判断的内容为数组时,表中仅仅罗列了一种情况,下面补充两种容易误会的情况
PHP代码

$b[]=null;     
$b[]=null;        
//视为数组已存在且不为空  
  
$c[]="";  
$c[]="";  
//视为数组已存在且不为空

empty
(PHP 3, PHP 4, PHP 5)
empty -- 检查一个变量是否为空
描述
bool empty ( mixed var )

如果 var 是非空 或非零 的值,则 empty() 返回 FALSE。换句话说,"" 、0 、"0" 、NULL 、FALSE 、array() 、var $var ; 以及没有任何属性的对象 都将被认为是空的,如果 var 为空,则返回 TRUE。
除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。参见转换为布尔值获取更多信息。
empty() 与 isset() 的一个简单比较。

[code]
<?php
$var = 0;
// 结果为 true,因为 $var 为空
if (empty($var)) {
    echo '$var is either 0 or not set at all';
}
// 结果为 false,因为 $var 已设置
if (!isset($var)) {
    echo '$var is not set at all';
}
?>
[/code]

注: 由于这是一个语言结构而非函数,因此它无法被变量函数调用。
注: empty() 只检测变量,检测任何非变量的东西都将导致解析错误 。换句话说,后边的语句将不会起作用: empty(addslashes($name))。
isset
(PHP 3, PHP 4, PHP 5)
isset -- 检测变量是否设置
描述
bool isset ( mixed var [, mixed var [, ...]] )

如果 var 存在则返回 TRUE,否则返回 FALSE。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。
警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。
is_null
(PHP 4 >= 4.0.4, PHP 5)
is_null -- 检测变量是否为 NULL
描述
bool is_null ( mixed var )

如果 var 是 null 则返回 TRUE,否则返回 FALSE。
查看 NULL 类型获知变量什么时候被认为是 NULL,而什么时候不是。

Empty 和空字符串区别的更多相关文章

  1. 空字符串(“”)和null和空格字符串(" ")的区别

    1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符 ...

  2. Java空字符串与null的区别和判断字符串是否为空的方法

    Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...

  3. Java进阶(二十一)java 空字符串与null区别

    java 空字符串与null区别 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串, ...

  4. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

  5. SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间

    SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间 这里只讨论字符串类型,int.datetime.text这些数据类型就不讨论了,因为是否节省空间是根据数据类型来定的 在写这篇文 ...

  6. ajax post提交空字符串(string.Empty) MVC接收为null的问题

    ajax post提交空字符串(string.Empty) MVC接收为null的问题 这个问题查了好多资料才知道原因: if (bindingContext.ModelMetadata.Conver ...

  7. 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别

    isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...

  8. Django与SQL语言中——NULL与空字符串的区别

    SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...

  9. Java 空字符串和 字符串为null的区别

    之前一直没有搞清楚 字符串为空和字符串为null的区别,今天写代码一直出现NullPointerException异常,我一直没有搞清楚,后来发现我是这样写的 String s = null; s = ...

随机推荐

  1. test 2016-12-6

    //$token = drupal_get_token('abc'); //dpm(drupal_valid_token($token,'abc')); //1 //从任何字符串生成一个密码形式的字符 ...

  2. OneSQL助力永辉超市大卖特卖

    数据库集群查询达到10w/s,更新操作5k/s,正常! 应用并发连接达到历史高峰4倍,正常! 业务平稳运行,正常! 永辉微店527大促,圆满成功!这标志着平民软件数据库工程师.accenture咨询实 ...

  3. java中参数传递方式

    在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数.参数可以是对象引用,而 Java ...

  4. 关于firstChild,firstElementChild和children

    <div> <p>123</p> </div> 在上面这段代码中,如果使用以下js代码 var oDiv=document.getElementByTa ...

  5. request和session作用域的意义

    1.简单说 page指当前页面.在一个jsp页面里有效 ,page里的变量没法从index.jsp传递到test.jsp.只要页面跳转了,它们就不见了.2.request 指从http请求到服务器处理 ...

  6. IE兼容问题,各类css hack代码(亲测有效)

    现在大部分企业对浏览器兼容要求是IE7+或者IE8+,要求IE6的很少,此处一并写出. IE6: _margin-top: 20px; IE6+IE7: *margin-top: 20px; +mar ...

  7. parseInt方法——将字符串解析为int值

    parseXxx()方法 语法:static int parseInt(String s)    返回字符串的十进制整数形式 static int parseInt(String s, int rad ...

  8. Gerald is into Art

    Gerald is into Art Gerald bought two very rare paintings at the Sotheby's auction and he now wants t ...

  9. ACCESS导入CSV文件出现乱码解决办法

    在ACCESS或Excel中导入CSV文件时常常出现乱码,这是因为简体中文版的windows操作系统及其应用软件默认都是ANSI/GBK编码,而导入的文件使用的编码与操作系统默认的编码不相符.出现这种 ...

  10. "Couldn't communicate with a helper application" in Xcode 7

    解决方案 xcrun git config --global user.email you@yourdomain.com xcrun git config --global user.name &qu ...