Php 代码dilemna-空与真之间的任何差异===空

Php 代码dilemna-空与真之间的任何差异===空,php,Php,好的,我是一个相对较新的程序员,花了很多时间总结和研究不同的方法来编写特定的代码 有谁能说一下,以下各项之间是否存在根本性差异,以及是否应该优先考虑以下各项: if (empty($array)) { //must be an empty array } if (true === empty($array)) { //must be an empty array } if (is_array($array) &

好的,我是一个相对较新的程序员,花了很多时间总结和研究不同的方法来编写特定的代码

有谁能说一下,以下各项之间是否存在根本性差异,以及是否应该优先考虑以下各项:

    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    
    }

抱歉,如果这看起来很琐碎,但不是开玩笑,那么这件事会占用我很多时间来决定,最终在某种程度上,如果你知道它是一个数组,那么它的正确性、健壮性或性能(或两者的组合)都会有所不同

if (empty($array))

如果您不确定数组是否已设置

if (isset($array) && !count($array))
如果你不确定它实际上是一个数组

if (is_array($array) && !count($array))
如果您想要详细,请使用

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

但您应该知道在您自己的代码中,在这之前会发生什么,因此,尽管寻求额外的冗长是令人钦佩的,但这通常是不必要的

如果你知道这是一个数组

if (empty($array))

如果您不确定数组是否已设置

if (isset($array) && !count($array))
如果你不确定它实际上是一个数组

if (is_array($array) && !count($array))
如果您想要详细,请使用

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

但您应该知道在您自己的代码中,在这之前会发生什么,因此,尽管寻求额外的冗长是令人钦佩的,但这通常是不必要的

唯一的区别是,在前两种情况下,参数不一定是数组-
为空(false)
也会输出false,但这应该不是问题


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

唯一的区别是,在前两种方法中,参数实际上不必是数组-
为空(false)
也会输出false,但这应该不是问题


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

您应该使用
if(emtpy($array))
。与第二个示例没有功能上的区别,第一个示例更具可读性。第三个例子似乎过于冗长。

您应该使用
if(emtpy($array))
。与第二个示例没有功能上的区别,第一个示例更具可读性。第三个例子似乎过于冗长。

第一个例子对我来说是正确的

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

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

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

第一个对我来说是正确的

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

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

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

是,存在差异。我不知道你为什么这么困惑。因此,首先将其减少一点:

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

if (true === empty($array)) {
    // is just empty - array or not
}
这两者在技术上是相同的。是一个布尔表达式,所以与true比较是真的。所以你可以从这两个选项中选择第一个,但是你也可以写更多,然后选择第二个。但是,你明白了

但是:

if (is_array($array) && count($array) === 0) {
    //must be an empty array    
}
显式测试类型是否为
Array
,并且该数组没有值。您也可以在此处执行此操作(仅供参考):


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

是的,存在差异。我不知道你为什么这么困惑。因此,首先将其减少一点:

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

if (true === empty($array)) {
    // is just empty - array or not
}
这两者在技术上是相同的。是一个布尔表达式,所以与true比较是真的。所以你可以从这两个选项中选择第一个,但是你也可以写更多,然后选择第二个。但是,你明白了

但是:

if (is_array($array) && count($array) === 0) {
    //must be an empty array    
}
显式测试类型是否为
Array
,并且该数组没有值。您也可以在此处执行此操作(仅供参考):


因为没有值的数组等于布尔值false。问题?注释?

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

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

使用
empty()

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

  • if($array)
  • if(空($array))
  • if(空($array)==TRUE)
  • if(计数($array)==0)
  • if(计数($array))

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

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

还需要注意的是,
empty()
不仅仅用于数组。它检查变量的值是否被认为是等效的
if (empty($array))
if (true === empty($array))
if (true == empty($array))
if (is_array($array) && count($array))