转载:https://blog.csdn.net/qq_38812954/article/details/79581785

判断变量的值,尤其是判断他们是否不为空,我们有以下4种方法:

  • if(isset($test)) true:变量已被赋值/设置
  • if(!empty($test)) true:变量不为空
  • if(!is_null($test)) true:变量不为空
  • if($test) true:以自身为参数,变量不为空

(为方便讨论,empty与is_null均取反值,使4个函数都为true时,变量不为空)

四个函数的区别,先说结论0,例子具体分析看第1部分。


0.总结isset(), !empty(), !is_null(),以自身为参数的区别

  1. isset()、!empty()会首先检查变量是否存在(存在返回true),然后再对变量值进行检测; 
    is_null()、以自身为参数,直接检查变量值是否为null,如果变量未定义会出现错误警告。
  2. isset()、!empty()的输入参数必须是一个变量($变量),因为它们是语言结构,不是函数,无法被变量函数调用(参考阅读:可变函数); 
    is_null()、以自身为参数,输入参数只要是能够有返回值的就可以(常量、变量、表达式等都可以);
  3. 判断为空的时刻: 
    • isset():仅当 未定义 或者 值为null 时,返回false;
    • !empty():未定义、 NULL、 “”(空字符)、0、“0”、FALSE、array(),均返回false;
    • !is_null():直接判断是否不为null,只有为null才返回false;未定义会出现错误警告;
    • 以自身为参数:未定义、 NULL、 “”(空字符)、0、“0”、FALSE、array(),均返回false;变量未定义时出现错误警告;

1.例子具体分析

4个函数对输入值为:数值(正常)、“”(空字符串)、array()(空数组)、0、“0”、false、null、值未定义,8种情况分别进行检验。 
测试代码如下:

  1.  
    <?php
  2.  
    $test=array("数值"=>100,"空字符串\"\""=>"","空数组array()"=>array(),"数值0"=>0,"字符\"0\""=>"0","false"=>false,"null"=>null);
  3.  
    $i=1;
  4.  
    /*将前七种情况放在数组里(最后一种是变量未定义),方便后面foreach循环测试*/
  5.  
     
  6.  
    foreach( $test as $key=>$value){
  7.  
    echo 'try:$test',$i,'=',$key,'<br/>';
  8.  
    echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
  9.  
    echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
  10.  
    echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
  11.  
    echo '以自身为参数',$value?' 1 no null':' 0 null','<br/>';
  12.  
    echo '<br/>';
  13.  
    ++$i;
  14.  
    }
  15.  
    /*4个函数对前七种情况通过foreach循环进行测试输出,返回1为true,0为false。*/
  16.  
     
  17.  
    $key="值未定义";
  18.  
    unset($value);//使用unset()销毁指定的变量$value;
  19.  
    echo 'try:$test',$i,'=',$key,'<br/>';
  20.  
    echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
  21.  
    echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
  22.  
    echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
  23.  
    echo '以自身为参数',$value?' 1 no null':' 0 null','<br/>';
  24.  
    echo '<br/>';
  25.  
    /*对最后一种情况:变量未定义进行测试*/
  26.  
    ?>

测试结果如下:

try:$test1=数值 
isset 1 define 
!empty 1 no empty 
!is_null 1 no null 
以自身为参数 1 no null

try:$test2=空字符串”” 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身为参数 0 null

try:$test3=空数组array() 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身为参数 0 null

try:$test4=数值0 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身为参数 0 null

try:$test5=字符”0” 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身为参数 0 null

try:$test6=false 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身为参数 0 null

try:$test7=null 
isset 0 undefine 
!empty 0 empty 
!is_null 0 null 
以自身为参数 0 null

try:$test8=值未定义 
isset 0 undefine 
!empty 0 empty 
!is_null 
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 22 
0 null 
以自身为参数 
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 23 
0 null

函数的true/false可用下表进行归纳(”1”表true,”0”表false):

函数/$t的值 备注 isset($t) !empty($t) !is_null($t) $t
100 有值 1 1 1 1
“” 空字符串 1 0 1 0
array() 空数组 1 0 1 0
0 数值0 1 0 1 0
“0” 字符0 1 0 1 0
false false 1 0 1 0
null null 0 0 0 0
  这里$t未定义 0 0 0(Notice) 0(Notice)

从上表可知:

  • 对于值为null和未定义的变量,四种方式都能返回false

    • 其中,!is_null()和“以自身为参数”对于未定义的变量还会出现Notice直接报错;
  • !empty()和“以自身为参数” 还会对“”、array()、0、“0”、false,均返回false;
  • 而isset()和!is_null()只对null和未定义变量做出false判断;

isset()、!empty()的输入参数必须是一个变量

  1.  
    $test=100;
  2.  
    echo isset($test),'<br/>';
  3.  
    echo !empty($test),'<br/>';
  4.  
    echo !is_null($test),!is_null(100),!is_null($test=100),'<br/>';
    • 只有!is_null(),可以直接写!is_null(100),!is_null($b=100);

    • 而isset()和!empty()这样写会报错,输入参数只能写入一个变量($变量)

    • 因为isset()和!empty()是语言结构,is_null()是一个函数;

判断变量是否不为空,函数isset()、!empty()与!is_null()的比较的更多相关文章

  1. php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断

    php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断 实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sph ...

  2. php中函数 isset(), empty(), is_null() 的区别

    NULL:当你在你的脚本中写下这样一行代码 $myvariable; //此处你想定义一个变量,但未赋值.会有Notice: Undefined variable echo $myvariable + ...

  3. velocity 判断 变量 是否不是空或empty

    原先的 #if($mobile) 这种写法是不准确的 ,请换成 "$!{ mobile}"!="" 说明 :    #if($mobile)   这种写法 只能 ...

  4. 常用验证函数isset()/empty()/is_numeric()函数

    1) isset()用来检查变量是否设置,若变量存在且值不为NULL时为TRUE: 检查多个变量时变量要全部存在且值不为NULL时为TRUE: 若用函数unset()释放后再用isset()检测时为F ...

  5. PHP中判断变量为空的几种方法

    判断变量为空,在许多场合都会用到,同时自己和许多新手一样也经常会犯一些错误, 所以自己整理了一下PHP中一些常用的.判断变量为空的方法. 1. isset功能:判断变量是否被初始化本函数用来测试变量是 ...

  6. PHP判断变量是否存在及函数isset() 、empty()与is_null的区别

    一.举例说明 A.如何判断一个变量是否定义? <?php // 假设不存在$test 变量 if (isset($test)) { echo '$test 已经set', '<br/> ...

  7. null、 is_null() 、empty() 、isset() PHP 判断变量是否为空

    PHP中,在判断变量是否为空的时候,总会纠结应该选用哪个函数,下面列取常用的多种情况,其中1/3经过我的验证,其它来自网络,验证后使用... 使用 PHP 函数对变量 $x 进行比较 表达式 gett ...

  8. php isset() empty() 区别, 判断 变量存在与否神器

    先看PHP手册: bool empty ( mixed $var ) 判断一个变量是否被认为是空的.当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在.如果变量不存在的话,empty ...

  9. js判断字符串是否全为空(使用trim函数/正则表达式)

    我们需要判断用户输入的是否全是空格,可以使用以下方法: 方法一: 使用trim() /* 使用String.trim()函数,来判断字符串是否全为空*/ function kongge1(test) ...

随机推荐

  1. LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)

    897. 递增顺序查找树 897. Increasing Order Search Tree 题目描述 给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有 ...

  2. (一)Shiro,久闻其名,而今初相识

    文章目录 shiro简介 功能介绍 从外部看 Shiro 架构 从内部看 Shiro 架构 多说一句,在学习shiro之前,我觉得应该先用 filter ,自己动手写过粗粒度的权限系统,而不要一上来就 ...

  3. QT http请求数据

    1.创建一个请求类(HttpWork): HttpWork.h头文件 #pragma once #include <QObject> #include <QNetworkAccess ...

  4. QT release版QAudioDeviceInfo获取不到音频设备,而debug版可以获取到

    新添加了两个模块:QCharts和Multimedia 但自己没有重新打包更新里面的库文件什么的... 坑爹... 害我找了这么久... 解决办法: 方法一: 将Qt安装目录下的plugins文件夹中 ...

  5. 打开python 交互式模式

    pip install jupyter jupyter notebook --ip=127.0.0.1 --port=8888

  6. docker 实践四:数据管理

    这篇是关于 docker 的数据管理. 注:环境为 CentOS7,docker 19.03. 一般容器中管理数据主要有两种方式: 数据卷(Data Volumes):容器内数据直接映射到本地主机环境 ...

  7. Java基础IO类之字节数组流

    package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...

  8. Z算法板子

    给定一个串$s$, $Z$算法可以$O(n)$时间求出一个$z$数组 $z_i$表示$s[i...n]$与$s$的前缀匹配的最长长度, 下标从$0$开始 void init(char *s, int ...

  9. Windows方便得运行jar文件

    新建文本文档,文件扩展名为“.bat”,然后输入下面内容: @echo off java -jar % pause 以后就只要拖动jar文件到这个bat文件上就行.

  10. 浅学CLR via C#笔记之类型转换

    我们都知道CLR最重要的一个特性就是类型安全,它在运行时就知道对象类型. 但我们会经常用到将一种类型转换成另一种类型,CLR也允许将对象转成他的实际类型,或者是它的基类型. 在C#中,支持隐士转换成它 ...