有人能解释清楚ArrayIterator 之间的根本区别吗? , ArrayObject 和 Array 在 PHP 的功能和操作方面?谢谢!
Best Answer-推荐答案 strong>
Array 是原生的 php 类型。您可以使用 php 语言结构 array() 创建一个,或从 php 5.4 开始 [] ArrayObject 是 object 这与数组完全一样。这些可以使用 new 创建关键词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 的期望对象,即使用对象语法访问公共(public)属性$object->foo = 'bar'; // works
$array->foo = 'bar'; // Warning: Attempt to assign property of non-object in ....
数组(作为 native 类型)比对象快得多。另一边,ArrayObject & ArrayIterator 类定义了某些可以使用的方法,而数组则没有这样的方法
比较 ArrayObject 对比 ArrayIterator 这两个之间的主要区别在于类具有的方法。ArrayIterator 工具Iterator 接口(interface),它提供了与元素迭代/循环相关的方法。 ArrayObject 有一个方法叫 exchangeArray 将它的内部数组与另一个数组交换。在 ArrayIterator 中实现类似的东西意味着要么创建一个新对象,要么遍历键 & unset 将所有这些一一添加,然后一一设置新数组中的元素。 接下来,由于ArrayObject 不能迭代,当你在 foreach 中使用它时它创建了一个 ArrayIterator 内部对象(与数组相同)。这意味着 php 创建了原始数据的副本 & 现在有 2 个具有相同内容的对象。对于大型阵列,这将被证明是低效的。但是,您可以指定要用于迭代器的类,因此您可以在代码中使用自定义迭代器。
关于php - PHP中ArrayIterator、ArrayObject和Array的区别,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/10502719/
|