我想知道是否总是有必要在每is_array()
之前使用foreach
这样的内容。
如果变量不是数组,则会抛出错误。 所以我总是使用:
if(is_array($users)) {
foreach($users as $user){
}
}
你会推荐我什么? 感谢。
答案 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) {
//..
}