数组是Traversable的实例吗?

c3c*_*ris 3 php

这是我框架中的基本数组

 array(2) {
  [0]=>
  string(2) "40"
  [1]=>
  string(2) "41"
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

echo($array instanceof Traversable); // 0
echo(is_array($array)); // 1
Run Code Online (Sandbox Code Playgroud)

看来我的标准php数组不是Traversable的实例,这似乎不一致。

小智 6

是的,它不是可遍历的。

接口Traversable的主要目标是使对象可用于foreach


Wil*_*een 6

  • php中的数组是原始类型,原始类型不能继承类或实现接口

  • 因此php中的数组类型不是一个实例Traversable

我想添加的附加信息是:

  • 该数组和 Traversable 组合形成另一种类型,称为 iterable
  • 换句话说, iterablephp 中的类型是以下的并集Traversable | array
  • 像迭代器和生成器这样的接口类型实现了 Traversable,因此属于类型iterable
  • 如果您实现一个函数,该函数作为我们想要迭代的参数(使用 foreach),但我们事先不知道它是数组还是其他iterable数据结构(如实现 的类Iterator),这通常很有用。