代码dilemna - 空或真===空的任何区别

时间:2013-01-05 23:10:34

标签: php

好吧,我是一个相对较新的程序员,花了很多时间来编写和编写某些代码的不同方法。

任何人都可以说下列之间是否有任何根本区别,如果有的话应该优先于另一个:

    if (empty($array)) {
        //must be an empty array 
    }

    if (true === empty($array)) {
        //must be an empty array 
    }

    if (is_array($array) && count($array) === 0) {
        //must be an empty array    
    }

很抱歉,如果这看起来微不足道,但不是开玩笑,这些东西占用了我很多时间的决定,最终在某种程度上,正确性,稳健性或性能(或组合)必须有所不同

8 个答案:

答案 0 :(得分:2)

您的前两个示例完全相同,因为empty()将始终返回TRUEFALSE。第二个示例唯一更改的是检查是隐式还是显式。

同样重要的是要注意empty()不仅用于数组。它检查变量的值是否等同于FALSE。空数组只是其中一个值,其中还包括空字符串和零。

使用empty()if ($value)之类的唯一真正区别是empty()包含对isset()的隐式调用,因此即使您使用的是变量,它也能正常工作检查不存在。

如果你确定变量是一个数组,那么你的所有三个选项都是等价的。实际上,如果变量存在且是数组类型,则以下所有内容都等效于检查数组中的元素:

  • if ($array)
  • if (empty($array))
  • if (empty($array) === TRUE)
  • if (count($array) === 0)
  • if (count($array))

您问题中的示例之间的唯一区别是第三个示例中的显式类型检查,以及前两个中的隐式isset()检查。如果你确定该变量存在,并且是一个数组,那么这三个在功能上是相同的。

答案 1 :(得分:1)

如果你知道它是一个数组

if (empty($array))

if (!count($array))

如果您不确定数组已设置

if (isset($array) && !count($array))

如果你不确定它实际上是一个数组

if (is_array($array) && !count($array))

如果您想要使用详细信息

if ( !isset($array) || !is_array($array) || (is_array && empty($array)) )

但是你应该知道你自己的代码之前发生了什么,所以,尽管寻求额外的冗长是令人钦佩的,但通常没有必要。

答案 2 :(得分:1)

是的,存在差异。我不知道为什么你这么困惑。所以首先要减少一点:

if (empty($array)) {
    // is just empty - array or not
}

if (true === empty($array)) {
    // is just empty - array or not
}

这两个在技术上是相同的。 empty是一个布尔表达式,因此与true相比是正确的。所以你可以在这里选择这两个中的第一个,但你也可以写更多并采取第二个。但是,你明白了。

但是:

if (is_array($array) && count($array) === 0) {
    //must be an empty array    
}

您明确测试类型是否为Array且该数组没有值。你也可以在这里(仅供参考):

if ($array && is_array($array)) {
    //must be an empty array    
}

因为没有值的数组等于布尔值false。有问题吗?评论

答案 3 :(得分:0)

嗯,唯一的区别是,在前两个中,参数并不一定是一个数组 - is_empty(false)也会输出false,但这应该不是问题。

我一直使用第一种也是最简单的方法。

答案 4 :(得分:0)

你应该选择if (emtpy($array))。第二个示例没有功能差异,第一个示例更具可读性。第三个例子似乎不必要地冗长。

答案 5 :(得分:0)

第一个对我来说是正确的。

第二个是没有必要的,因为php的empty()函数只能返回布尔值,你不需要像这样检查返回值:

if (true === empty($array)) {
    //must be an empty array 
}

第三项检查还检查变量类型是否真的是一个数组。如果您只检查count($a) == 0并且$a不是数组php将生成通知。

答案 6 :(得分:0)

1。 您应该了解==和===之间的差异,以便了解它。

===符号将检查双方的值和类型是否相同。所以0 ==“0”为真,但0不是===“0”。

2。 你应该更好地理解你想做什么:你想确定你的阵列存在吗?你想确定你的数组是空的吗?你想要两个吗?

如果你知道你有阵列,但不确定它是否为空,那么最好的解决方案是:

if (empty($ARRAY)) {
    /* code if array is empty */
}

请注意,如果阵列不存在,将执行此代码。要检查数组是否存在,您可能希望使用以下代码包装上面的代码:

if (isset($ARRAY)) {
    /* code if array is set */
}

3。 你问是否有差异。我们来看看:

if (empty($array)) {
    //must be an empty array 
}

if (true === empty($array)) {
    //must be an empty array 
}

这两个代码检查数组是否为空。第一种是更流行的写作方式,但他们都会做这项工作。

if (is_array($array) && count($array) === 0) {
    //must be an empty array    
}

这个有点不同:条件的is_array部分将检查数组是否存在,这将检查您的其他代码是否存在。请注意,对于未设置的变量,count()返回0,如果要检查数组是否存在,则返回is_array。

答案 7 :(得分:0)

这取决于您应该选择哪种方式。

empty($array)

最简单,最常用/最常用的方式是

if (empty($array))

如果变量$array每次出现时都是如此:

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • “0”(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)

(见这里:empty

true === empty($array)

第二个版本

if (true === empty($array))

是不必要的。函数empty返回一个布尔值,你不必确保类型是布尔值===。这很难写

if (true == empty($array))

,这等于第一个版本。

is_array($array) && count($array) === 0

最后一个版本是interresting。它将变量$array测试为数组。 您不会将count类型安全的结果与===进行比较。它只返回数字。为了确保数字大于零,足以将其视为像这样的布尔值

if (is_array($array) && count($array))

如果你不确定$array是一个数组但是必须是这样的话,那么这个案例就是必要的。 在其他情况下,第一种是最好的方式。