可迭代对象和数组类型提示?

我有很多函数,它们具有对数组的类型提示或用于is_array()检查变量的数组性质。

现在,我开始使用可迭代的对象。他们实施IteratorIteratorAggregate。如果它们通过类型提示或接受,则将它们接受为数组is_array()吗?

如果必须修改代码,是否有通用的is_iterable(),或者我必须做类似的事情:

if ( is_array($var) OR $var instance_of Iterable OR $var instanceof IteratorAggregate ) { ... }

还有哪些其他可迭代的接口?

回答:

我认为您的意思是instanceof

Iterator,PHP没有Iterable接口。它确实有一个Traversable接口。Iterator并且IteratorAggregate两者都进行了扩展Traversable(而AFAIK只是这样做的)。

但是不,实现的对象Traversable不会通过is_array()检查,也没有内置is_iterable()函数。您可以使用的支票是

function is_iterable($var) {

return (is_array($var) || $var instanceof Traversable);

}

需要明确的是, php对象都可以使用foreach进行迭代,但是只有

实现Traversable。因此,所提供的is_iterable功能不会检测到foreach可以处理的所有事情。

以上是 可迭代对象和数组类型提示? 的全部内容, 来源链接: utcz.com/qa/400755.html

回到顶部