0

Ok, i am a relatively new programmer and spend way to much time umming and ahhing over different ways to write certain code.

Can anyone please say whether there is any fundamental difference between the following and if any should be preferred over the other:

    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    
    }

Sorry if this seems trivial but no joke, this stuff takes up a lot of my time deciding and ultimately at some level there has to be a difference in either correctness, robustness or performance (or a combination)

4

8 回答 8

2

您的前两个示例是相同的,因为empty()将始终返回TRUEor FALSE。第二个示例唯一改变的是对此的检查是隐式的还是显式的。

同样重要的是要注意它empty()不仅仅用于数组。它检查变量的值是否被视为等效于FALSE。空数组只是这些值之一,它还包括空字符串和零等内容。

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

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

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

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

于 2013-01-05T23:24:17.230 回答
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)) )

但是您应该知道在您自己的代码中之前的内容,因此,尽管寻求额外的冗长是令人钦佩的,但通常没有必要。

于 2013-01-05T23:16:10.920 回答
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。问题?注释?

于 2013-01-05T23:19:30.870 回答
0

这取决于您应该喜欢哪种方式的上下文。

empty($array)

最简单和最常用/使用的方法是

if (empty($array))

每次变量$array打开时,if 都会为真:

  • ""(一个空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0" (0 作为字符串)
  • 无效的
  • 错误的
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)

(见这里empty:)

true === empty($array)

第二个版本与

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

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

if (true == empty($array))

这与第一个版本相同。

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

最后一个版本很有趣。它测试变量$array是一个数组。您不会将counttypesafe 的结果与===. 它只会返回数字。为了确保数字大于零,将其视为布尔值就足够了

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

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

于 2013-01-05T23:31:44.027 回答
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 也是如此。

于 2013-01-05T23:24:46.193 回答
0

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

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

于 2013-01-05T23:17:30.650 回答
0

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

于 2013-01-05T23:17:43.687 回答
0

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

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

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

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

于 2013-01-05T23:19:14.133 回答