首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Symfony提供一个OrderedHashMap

问为什么Symfony提供一个OrderedHashMap
EN

Stack Overflow用户
提问于 2018-03-23 08:55:11
回答 2查看 496关注 0票数 2

Symfony提供了一个OrderedHashMap。Its 文献状态

与关联数组不同,映射跟踪添加和删除键的顺序。这个顺序反映在迭代过程中。

我对这句话感到困惑,因为我认为PHP关联数组实际上已经是有序映射了。我在SO上找到了这个问题,这证实了我先前的假设:PHP关联数组有排序吗?

我想知道,如果Symfony开发者不知道PHP数组已经是有序映射,还是我不理解Symfony的OrderedHashMap的角色

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-23 09:15:27

当然,PHP的数组是一个有序映射。

但是Symfony的OrderedHashMap与PHP的数组有一些不同的行为(比如特性)。

OrderedHashMap支持迭代期间的并发修改。这意味着您可以在foreach循环中插入和删除元素,迭代器将相应地反映这些更改。但是迭代中的array是复制的(在写上复制),任何修改都不会反映在循环中。

代码语言:javascript
复制
$map = new OrderedHashMap();
$map[1] = 1;
$map[2] = 2;
$map[3] = 3;

foreach ($map as $index => $value) {
    echo "$index: $value\n"
    if (1 === $index) {
        $map[1] = 4;
        $map[] = 5;
    }
}

如果使用array,您将得到不同的输出。在array的迭代中,循环将看不到数字5。

关于“为什么?”:在塞福尼(氏)码基中搜索。只有一个位置可以使用OrderedHashMap,它用于存储窗体的子级。new InheritDataAwareIterator($this->children)使用它来迭代。所以我认为答案是帮助处理表单的孩子。

多亏了@鱼骨:

因此,好处不是排序,而是在循环中修改它的能力。

票数 2
EN

Stack Overflow用户

发布于 2018-03-23 09:21:08

通常,不仅在Symfony的上下文中,除了其他实现的特性之外,面向对象的结构比原始类型(如int、string或array )更可取,因为它们可以被注入类中进行单元测试。

面向对象的结构也可以执行不变量,而原始类型只能保存数据而不存在任何行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49445692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档