在foreach之前总是需要使用“is_array()”吗?

时间:2012-06-22 13:02:41

标签: php arrays foreach

我想知道是否总是有必要在每is_array()之前使用foreach这样的内容。

如果变量不是数组,则会抛出错误。 所以我总是使用:

if(is_array($users))   {
    foreach($users as $user){

    }
}

你会推荐我什么? 感谢。

6 个答案:

答案 0 :(得分:23)

如果你知道你的代码,那么没有理由必须检查它是否是一个数组。

否则,如果变量类型 ,我会建议稍微调整一下代码,这样就不会这样做了。

除此之外,使用if语句即可。

答案 1 :(得分:5)

如果您确定某些内容是数组或以其他方式实现Iterable,那么您显然不需要额外的if条件。如果您不确定,那么显然检查类型将使您的代码更可靠。

我见过的一些黑客包括将变量转换为数组:( array)$ users。不建议这样做,最好明确检查类型。

此外,如果这是函数内的代码,您可以使用参数输入:

function mycode(array $users)
{
    foreach ($users as $user) { }
}

当使用错误的类型调用函数时,它将触发错误。

答案 2 :(得分:3)

假设这发生在一个函数中:

function doSomethingWithUsers($users)
{
    if(!is_array($users))
    {
        throw new Exception('$users is expected to be an array');
    }

    foreach($users as $user){
        ...
    }
}

这样,无论何时使用错误的参数调用它,您都会立即看到。

答案 3 :(得分:2)

一般情况下,不要更好。

编程中一个很好的一般原则是不隐藏或忽略错误。

如果一个变量应该是一个数组,那么如果它不是一个数组,它就没有特别忽略这种情况的服务。相反,最好通过内置错误处理来了解问题。否则,你没有解决问题,只是隐藏它的效果。这可以使调试后续问题变得困难。

然而,这里有许多假设:

  • 这假设变量应该是一个数组。如果你在它上面使用foreach(),我认为就是这种情况。如果你在可能合法地不是数组的东西上运行foreach(),那么可能表明你的代码可能需要重新工作。

  • 您需要正确设置错误报告和/或日志记录(在开发服务器上进行报告,登录生产),以便从PHP错误告诉您的内容中获益。具体来说,忽略PHP警告几乎绝不是一个好主意 - 尽管被称为“警告”,它们通常表示(在我看来)应该停止执行的失败。

也就是说,在foreach()前面使用is_array()并不一定错误

答案 4 :(得分:1)

  

你会推荐我什么?

是的,这是个好主意,这些注意事项会让你成为defensive programmer:)

答案 5 :(得分:0)

对我来说更好:

foreach (is_array($arr) ? $arr : array() as $key=>$val) {
  //..
}