我想知道是否总是有必要is_array()
在每次foreach
我做之前使用类似的东西。
如果变量不是数组,则会引发错误。所以我总是使用:
if(is_array($users)) {
foreach($users as $user){
}
}
你会推荐我什么?谢谢。
好吧,如果您对代码足够了解,则没有理由必须检查它是否是数组。
否则,如果变量经常更改类型,我建议您稍微调整一下您的代码,这样它就不会那样做。
除此之外,使用该 if 语句是要走的路。
如果您确定某个东西是一个数组或以其他方式实现 Iterable,那么您显然不需要额外的if
条件。如果您不确定,那么显然检查类型将使您的代码更可靠。
我见过的一些技巧包括将变量转换为数组:(array)$users。但是不推荐这样做,最好明确检查类型。
此外,如果这是函数内的代码,您可以使用参数类型:
function mycode(array $users)
{
foreach ($users as $user) { }
}
当使用错误的类型调用函数时,将触发错误。
假设这发生在一个函数中:
function doSomethingWithUsers($users)
{
if(!is_array($users))
{
throw new Exception('$users is expected to be an array');
}
foreach($users as $user){
...
}
}
这样,无论何时使用错误的参数调用它,您都会立即看到。
一般来说,最好不要。
编程中一个好的一般原则是不要隐藏或忽略错误。
如果一个变量应该是一个数组,那么如果它不是一个数组,那么你就不会专门忽略这种情况。相反,最好通知您内置错误处理的问题。否则,你没有解决问题,只是隐藏了它的影响。这会使调试后续问题变得困难。
但是,这里有许多假设:
这是假设变量应该是一个数组。如果您在其上使用 foreach (),我认为是这种情况。如果您在可能合法地不是数组的东西上运行 foreach () ,则可能表明您的代码可能需要重新工作。
您的错误报告和/或日志记录(在开发服务器上报告,在生产环境中记录)需要正确设置,以便从 PHP 错误告诉您的内容中受益。具体来说,忽略 PHP 警告几乎从来都不是一个好主意——尽管它们被称为“警告”,但它们通常表示失败(在我看来)应该停止执行。
也就是说,在 foreach() 前面使用 an不一定是错误的。is_array()
你会推荐我什么?
是的,这是个好主意,这样的考虑让你成为一个防御性程序员:)
这对我来说更好:
foreach (is_array($arr) ? $arr : array() as $key=>$val) {
//..
}