转载: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 20. 有效的括号(Valid Parentheses)

    20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...

  2. LeetCode 637. 二叉树的层平均值(Average of Levels in Binary Tree)

    637. 二叉树的层平均值 637. Average of Levels in Binary Tree LeetCode637. Average of Levels in Binary Tree 题目 ...

  3. pytorch1.0实现RNN-LSTM for Classification

    import torch from torch import nn import torchvision.datasets as dsets import torchvision.transforms ...

  4. Prometheus入门到放弃(2)之Node_export安装部署

    1.下载安装 node_exporter服务需要在三台机器都安装,这里我们以一台机器为例: 地址:https://prometheus.io/download/ ### 另外两个节点部署时,需要先创建 ...

  5. 【程序人生】程序员真会玩,工作996,生病ICU

    昨天Github上一个项目彻底爆红了网络,短短一天star数突破一万,Issues已破1800,大家纷纷说出有关企业的不合理加班行为,句句吐露程序员的心声,掀起了一波抵制加班潮,抵制996. 该项目里 ...

  6. 【Qt开发】第一个Qt程序Hello World!

    一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级,冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位 ...

  7. 关于python的一次性能调优过程

    问题 这两天在公司帮老大写一个程序功能,要求抓取从elasticsearch和kibana服务器上返回的数据,统计所有hits的数据字段ret_code为0的hit,并计算其占有率等一些功能. 功能倒 ...

  8. pod宿主机挂载pv存储过程

    1处的控制循环Control Loop应该是:VolumeManagerReconciler ----------------------------------------------------- ...

  9. Linux上安装pstree命令(-bash: pstree: command not found)

    一.pstree命令的安装 1.在 Mac OS上 brew install pstree 2.在 Fedora/Red Hat/CentOS yum -y install psmisc 3.在 Ub ...

  10. 使用代码浏览WPF控件模版

    纯代码创建,不需要创建界面,创建WPF工程后,直接复制代码就可以使用. 当你手头没有Blend,又不记得以下这段代码,但是又想浏览控件模版的时候,就可以直接复制拿来用了. public partial ...