代码困境- empty或true === empty之间的任何区别


Code dilemna - any difference between empty or true === empty

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

有谁能说一下以下两者之间是否有根本的区别,是否有一个应该优先于另一个:

    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    
    }

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

你的前两个例子是相同的,因为empty()将始终返回TRUEFALSE。第二个例子唯一改变的是this的检查是隐式的还是显式的。

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

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

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

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

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

是有区别的。我不知道你为什么这么困惑。所以首先把它缩小一点:

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

这两个在技术上是相同的。empty是一个布尔表达式,所以与true比较是true yeah。所以你可以选择这两个中的第一个,但你也可以多写一些,然后选择第二个。但是,你懂的。

然而:

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

显式测试类型是否为Array并且该数组没有值。您也可以在这里执行此操作(仅供参考):

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

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

如果你知道它是一个数组

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)) )

,但是你应该知道在你自己的代码中它之前是什么,所以,尽管追求额外的冗长是令人钦佩的,但它通常是不必要的。

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

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

您应该选择if (emtpy($array))。第二个示例与第一个示例在功能上没有区别,而第一个示例更具可读性。第三个例子似乎不必要地冗长。

第一个对我来说是正确的

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

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

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

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

empty($array)

最简单和最常用的方法是

if (empty($array))

当变量$array为下列任一项时,If将为true:

  • "(空字符串)
  • 0(0为整数)
  • 0.0(0为float)
  • "0"(0作为字符串)
  • array()(空数组)
  • $ var;(已声明的变量,但没有值)

(参见:empty)

true === empty($array)

第二个版本

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

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

就足够了
if (true == empty($array))

,这等于第一个版本

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

最后一个版本很有趣。它测试变量$array是否为数组。您不会比较count类型安全与===的结果。它将只返回数字。为了确保这个数字大于零,把它当作布尔值处理就足够了,就像这里的

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

如果你不确定$array是一个数组,但它必须是,这种情况是必要的。在其他情况下,第一种方法是最好的。

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。