gpt4 book ai didi

php - PHP 中 ArrayIterator、ArrayObject 和 Array 的区别

转载 作者:IT王子 更新时间:2023-10-28 23:43:49 26 4
gpt4 key购买 nike

有人能解释清楚PHP中ArrayIteratorArrayObjectArray在功能和操作方面的根本区别吗?谢谢!

最佳答案

Array 是原生的 php 类型。您可以使用 php 语言构造 array() 或从 php 5.4 开始的 []

创建一个

ArrayObject 是一个 object,其工作方式与数组完全相同。这些可以使用 new 关键字

创建

ArrayIterator 类似于 ArrayObject 但它可以自行迭代。也使用 new

创建

比较 Array 与 (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 类型)比对象快得多。另一方面,ArrayObjectArrayIterator 类定义了某些可以使用的方法,而数组则没有这样的东西


比较 ArrayObjectArrayIterator

这两者的主要区别在于类的方法。

ArrayIterator 实现了 Iterator 接口(interface),该接口(interface)为其提供了与元素迭代/循环相关的方法。 ArrayObject 有一个名为 exchangeArray 的方法,可以将其内部数组与另一个交换。在 ArrayIterator 中实现类似的东西意味着要么创建一个新对象,要么循环遍历键 & unset 将它们一一设置,然后从新数组一中设置元素一个接一个。

接下来,由于 ArrayObject 不能被迭代,所以当你在 foreach 中使用它时,它会在内部创建一个 ArrayIterator 对象(与数组相同) .这意味着 php 创建了原始数据的副本,现在有 2 个具有相同内容的对象。这对于大型阵列将被证明是低效的。但是,您可以指定将哪个类用于迭代器,因此您可以在代码中使用自定义迭代器。

关于php - PHP 中 ArrayIterator、ArrayObject 和 Array 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com