Array
是原生 php 类型。您可以使用 php 语言构造创建一个array()
,或从 php 5.4 开始[]
ArrayObject
is an object
其工作原理与数组完全相同。这些可以使用创建new
keyword
ArrayIterator
就好像ArrayObject
但它可以自我迭代。还使用创建new
比较Array
vs (ArrayObject
/ArrayIterator
)
它们都可以使用 php 的数组语法来使用,例如。
$array[] = 'foo';
$object[] = 'foo';
// adds new element with the expected numeric key
$array['bar'] = 'foo';
$object['bar'] = 'foo';
// adds new element with the key "bar"
foreach($array as $value);
foreach($object as $value);
// iterating over the elements
但是,它们仍然是对象与数组,因此您会注意到以下方面的差异
is_array($array); // true
is_array($object); // false
is_object($array); // false
is_object($object); // true
大多数 php 数组函数都需要数组,因此使用对象会引发错误。这样的功能有很多。例如。
sort($array); // works as expected
sort($object); // Warning: sort() expects parameter 1 to be array, object given in ......
最后,对象可以做你所期望的事情stdClass
对象,即使用对象语法访问公共属性
$object->foo = 'bar'; // works
$array->foo = 'bar'; // Warning: Attempt to assign property of non-object in ....
数组(作为本机类型)比对象快得多。另一边,ArrayObject
& ArrayIterator
类定义了某些可以使用的方法,而数组则没有这样的方法
比较ArrayObject
vs ArrayIterator
这两个之间的主要区别在于类所具有的方法。
The ArrayIterator
实施Iterator
接口,它提供了与元素迭代/循环相关的方法。ArrayObject
有一个方法叫做exchangeArray
将其内部数组与另一个数组交换。实现类似的事情ArrayIterator
意味着要么创建一个新对象,要么循环遍历键 &unset
将它们一一删除,然后将新数组中的元素一一设置。
接下来,自从ArrayObject
当您在中使用它时,无法迭代foreach
它创造了一个ArrayIterator
内部对象(与数组相同)。这意味着 php 创建原始数据的副本,并且现在有 2 个具有相同内容的对象。这对于大型阵列来说是低效的。但是,您可以指定要使用哪个类作为迭代器,这样您就可以在代码中使用自定义迭代器。