Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:是空的($var)相当于$变量_Php - Fatal编程技术网

PHP:是空的($var)相当于$变量

PHP:是空的($var)相当于$变量,php,Php,为了验证变量值,我们可以执行以下操作 if(empty($var)){ } 或 这将在空字符串上返回true,0作为数字,false,null if(!$var){ } 这两种方法的区别是什么,它们是等效的吗 编辑:一些行为不同的示例将更加实用 EDIT2:与答案的唯一区别在于,如果$var未定义,则第二个答案将抛出通知。它们返回的布尔值呢 EDIT3:对于$var,我指的是具有任何值的任何变量,甚至是未定义的变量 用户回答的结论: 如果(!$var)和empty($var)如本文所述相等,

为了验证变量值,我们可以执行以下操作

if(empty($var)){
}

这将在空字符串上返回true,0作为数字,false,null

if(!$var){
}
这两种方法的区别是什么,它们是等效的吗

编辑:一些行为不同的示例将更加实用

EDIT2:与答案的唯一区别在于,如果$var未定义,则第二个答案将抛出通知。它们返回的布尔值呢

EDIT3:对于$var,我指的是具有任何值的任何变量,甚至是未定义的变量

用户回答的结论
如果(!$var)
empty($var)
如本文所述相等,则它们将在同一变量上返回相同的bool值

if(!$var)
如果未定义
$var
将返回一个php通知,通常情况下(如果我们编写了好的代码),大多数IDE都会在它下面加下划线

  • 检查简单变量时,
    如果(!$var)
    应该正常
  • 检查数组索引($var['key'])或对象属性($var->key)时
    empty($var['key'])
    最好使用empty
不,它们不相等

if(empty($var)){
  echo "empty used\n";
}


if(!$var){ # line no. 6
  echo "! used";
}
将输出

empty used
Notice: Undefined variable: var in /var/www/html/test.php on line 6
! used
使用empty()函数时,下列值被视为空

  • “”(空字符串)
  • 0(0作为整数)
  • 0.0(0作为浮点数)
  • “0”(0作为字符串)
  • 空的
  • 假的
  • array()(空数组)
  • $var;(声明了一个变量,但没有值)
正如你在文档中看到的那样

empty()本质上是与!isset($var)| |$var ==错误


主要区别在于,如果变量不存在,empty()不会抱怨,而使用!将生成一个警告

在旧版本的PHP中,empty()只对直接变量起作用,这意味着这将失败:

empty($a && $b);
这在5.5中已更改,但没有更改。 第一个验证$var是否有任何值。 第二个验证为布尔值-如果为真或否

第二个将给您一个通知,如果$var的值为空,第一个将为true

如果您希望验证$var是否存在,请使用isset

if( !isset($var) )
    echo '$var does not exists!<br>';

if(empty($var))
    echo 'The value is empty or does not exists!<br>';

if( !$var )
    echo 'Value is false!<br>';

$var = '';
if(empty($var))
    echo 'The value is empty or does not exists!<br>';

官方手册包含了您在这方面的所有知识:

if(!$var)
是最后一列,
boolean:if($x)
否定

正如您所看到的,它们是相同的,但是如果没有设置变量,
empty
不会抱怨

从手册中:

empty() does not generate a warning if the variable does not exist

花点时间,研究一下那个图表。

据我所知,它很简单

empty()
基本上等同于
!isset($var)| |$var
,不会抛出任何警告/通知,而只使用
$如果变量未定义,var
将抛出通知

为完整起见,在使用
empty()
时,以下内容被视为空:

  • 空字符串
  • 空数组
  • 0
    0.0
    '0'
    (int,float,string)
  • null
  • false
  • 没有值的已定义变量
  • 问题是因为$vars比空($vars)短,我们中的许多人更喜欢第一种方法

    您更喜欢第一种方式,因为它是一种“较短的方式”?
    更短的代码并不意味着更好的代码或更快的脚本;)

    PHP函数及其各种其他行为的速度不是由函数名的长度决定的。它取决于PHP在评估、操作和返回结果时实际执行的操作

    除此之外,不要根据代码长度选择方法,而是根据“给定场景”的场景和最佳方法选择方法。
    哪一个最好取决于您需要什么,除了您提到的两个变量检查之外,还有其他变量检查(
    isset()
    for one)

    但问题是它们是否总是等价的

    不一定-见

    或者创建一个快速测试脚本,查看PHP在两个场景中返回的结果

    您还可以在框架中初始化变量(或者,很可能是独立脚本),这意味着场景会发生变化,您的问题和使用的方法也会发生变化

    关于哪一个是最好的,这都是有关联的

    至于要求的答案。 无论如何,为了回答您的问题,这里有一些测试:

    (!$vars)

    示例代码:

    if ( !$vars )
     {
      echo "TRUE";
     }
    else
     {
      echo "FALSE";
     }
    
    if ( empty($vars) )
     {
      echo "TRUE";
     }
    else
     {
      echo "FALSE";
    }
    
    将返回:
    注意:未定义的变量:X行中/任意/上的变量
    真的

    但是,如果您首先在脚本中的某个位置初始化var:

    $vars = "";
    $vars = NULL;
    $vars = 0;
    
    上述任何一项都将返回:
    [无PHP通知]
    真的

    将返回:
    假的

    这是因为使用感叹号测试的var是否为FALSE,因此当没有使用字符串初始化时,测试脚本将返回TRUE,因为它不是FALSE

    当我们用字符串初始化它时,var NOT being FALSE就是FALSE

    空($vars)

    示例代码:

    if ( !$vars )
     {
      echo "TRUE";
     }
    else
     {
      echo "FALSE";
     }
    
    if ( empty($vars) )
     {
      echo "TRUE";
     }
    else
     {
      echo "FALSE";
    }
    
    完全未初始化/设置,以及以下所有内容:

    $vars = "";
    $vars = NULL;
    $vars = 0;
    
    将返回:
    真的

    使用empty没有PHP通知,所以这里我们展示了这两个选项之间的区别(还记得我说过最短的代码不一定是“最好的”?取决于场景等)

    与之前的测试一样:

    $vars = "anything";
    
    返回:
    假的

    这与
    (!$var)
    相同,您正在测试是否为空,并且根本没有初始化var,或者使用任何“
    EMPTY()
    ”值:例如(“”),或NULL,或零(0),然后测试var是否为空,这样我们就得到了真输出

    将var设置为字符串时会得到FALSE,因为当我们将其设置为某个值时,它为空=FALSE


    区别在于
    empty()
    在未定义var时不会抛出PHP通知,而<
    empty($var) === !$var; // supposed that $vars has been defined here
    
    empty($array['somekey']); //will be silent if somekey does not exists
    !$array['somekey']; // will through a warning if somekey does not exists