gpt4 book ai didi

php - 关联数组与 SplObjectStorage

转载 作者:IT王子 更新时间:2023-10-29 01:19:09 28 4
gpt4 key购买 nike

我正在编写代码来管理独特对象的集合。这段代码的第一个原型(prototype)使用了一个关联数组,基本上我一直都是这样做的。

但是,我也热衷于利用添加到更现代版本的 PHP 中的功能,例如 [SplObjectStorage][1] 来代替这样做,部分是作为一种学习经验,部分原因是它必然会提供优势(我看到的基准表明 SplObjectStorage 在很多情况下可以比数组更快)。

当前的实现有一个关联数组,我使用 in_array() 检查该数组,以查看对象是否已在数组中,然后再向其添加新对象。

我在 SplObjectStorage 中看到的最大问题是它似乎(乍一看)不支持键/值关联数组行为,并且只能被视为索引数组。但是,PHP 新功能的文档不符合该语言更成熟部分的文档标准,我可能只是遗漏了一些东西。

我可以使用 SplObjectStorage 代替关联数组吗?如果是这样,添加新对象时如何定义键?更重要的是,与关联数组相比,SplObjectStorage 的相对优缺点是什么?

最佳答案

您不应将 SplObjectStorage 视为键值存储,而只是一组对象。某物是否在集合中,但它的位置并不重要

SplObjectStorage 中元素的“键”实际上是对象的哈希值。它使得不可能将同一对象实例的多个副本添加到 SplObjectStorage,因此您不必在添加之前检查副本是否已存在。

但是,在 PHP 5.4 中有一个名为 getHash() 的新方法,您可以重写该方法以返回对象的“散列”。这 - 在某种意义上 - 返回/设置 key ,以便您可以允许它在不同条件下存储。

SplObjectStorage 的主要优点是您可以获得许多处理不同集合并与之交互的方法(contains()removeAll ()removeAllExcept())。它的速度稍微好一些,但内存使用情况比普通 PHP 数组差

关于php - 关联数组与 SplObjectStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520241/

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