我有一个方法可以接收一个可以是任意数量类型的参数。
它可以是一个数组。
它可能是以某种方式可迭代的对象,例如集合。
它可能完全是其他东西,例如会抛出的字符串或整数
Warning: Invalid argument supplied for foreach()
Run Code Online (Sandbox Code Playgroud)
如何可靠地检查变量是否“可循环”以避免警告?
我试过is_array()如下,但这只适用于数组:
if(is_array($mystery_type)){
foreach($mystery_type as $value){
...
}
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶没有在这里找到答案,这可能意味着它非常简单,而且我遗漏了一些明显的东西。
如果您使用的是PHP 7.1+,您可以使用is_iterable():
if (is_iterable($mystery_type)) {
// your loop
}
Run Code Online (Sandbox Code Playgroud)
或者它的polyfill(在文档注释中找到):
if (!function_exists('is_iterable')) {
function is_iterable($obj) {
return is_array($obj) || (is_object($obj) && ($obj instanceof \Traversable));
}
}
Run Code Online (Sandbox Code Playgroud)
阅读更多:iterable伪类型(PHP 7.1+)