15

我想知道是否总是有必要is_array()在每次foreach我做之前使用类似的东西。

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

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

    }
}

你会推荐我什么?谢谢。

4

6 回答 6

22

好吧,如果您对代码足够了解,则没有理由必须检查它是否是数组。

否则,如果变量经常更改类型我建议您稍微调整一下您的代码,这样它就不会那样做。

除此之外,使用该 if 语句是要走的路。

于 2012-06-22T13:05:27.327 回答
5

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

我见过的一些技巧包括将变量转换为数组:(array)$users。但是不推荐这样做,最好明确检查类型。

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

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

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

于 2012-06-22T13:05:24.533 回答
4

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

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

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

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

于 2012-06-22T13:05:12.653 回答
2

一般来说,最好不要

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

如果一个变量应该是一个数组,那么如果它不是一个数组,那么你就不会专门​​忽略这种情况。相反,最好通知您内置错误处理的问题。否则,你没有解决问题,只是隐藏了它的影响。这会使调试后续问题变得困难。

但是,这里有许多假设:

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

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

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

于 2014-01-20T05:47:49.943 回答
1

你会推荐我什么?

是的,这是个好主意,这样的考虑让你成为一个防御性程序员:)

于 2012-06-22T13:04:25.910 回答
0

这对我来说更好:

foreach (is_array($arr) ? $arr : array() as $key=>$val) {
  //..
}
于 2019-07-18T09:19:13.383 回答