这是我框架中的基本数组
array(2) {
[0]=>
string(2) "40"
[1]=>
string(2) "41"
}
这是我的测试:
echo($array instanceof Traversable); // 0
echo(is_array($array)); // 1
似乎我的标准php数组不是Traversable的实例,似乎不一致。
答案 0 :(得分:6)
是的,它不是Traversable。
界面Traversable的主要目标是使对象可以与foreach
一起使用。
答案 1 :(得分:1)
无论是否一致,数组只是php中的原始类型(不是类),因此它不会遵循实现接口的面向对象样式-在这种情况下为Traversable接口。
但是,PHP提供了一种很好的方法,可以使用 \ ArrayObject 将数组转换为对象,该对象的行为几乎类似于数组(几乎因为它实际上是对象而不是数组):
$someArray = ['foo' => 'bar'];
$objectArray = new \ArrayObject($someArray);
// now you can use $objectArray as you would your $someArray:
// access values
$objectArray['foo']
// add values
$objectArray['boo'] = 'far';
// foreach it
foreach ($objectArray as $key => $value) { ... }
// it also implements \Traversable interface!
$objectArray instanceof \Traversable // true
答案 2 :(得分:0)
php中的数组是原始类型,原始类型不能继承 类或实现接口
因此php中的数组类型不是Traversable
的实例
我想添加的附加信息是:
iterable
iterable
类型是 Traversable | array
的并集iterable
类型iterable
数据结构(就像一个实现 Iterator
的类)。