可迭代对象和数组类型提示?
我有很多函数,它们具有对数组的类型提示或用于is_array()
检查变量的数组性质。
现在,我开始使用可迭代的对象。他们实施Iterator
或IteratorAggregate
。如果它们通过类型提示或接受,则将它们接受为数组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