php中数组的正确使用

php中数组的正确使用,php,arrays,performance,oop,multidimensional-array,Php,Arrays,Performance,Oop,Multidimensional Array,一位更资深的PHP程序员向我解释说,使用PHP数组效率低下,因为它会导致额外的数据复制。然后他解释说,通过创建类来保存数据,甚至数组,可以减少内存消耗,提高性能。这样,PHP就不会像在数组数组中那样被迫在类中复制/深度复制数据 他还解释说,与数组相比,我要寻找的对象更容易在适当的结构化对象树中找到。这我能理解 问题来了,我知道它们有点模糊 在对象上使用数组数组存储数据是否有合适的情况 在对象中存储数据是否总是更节省内存和性能 提前感谢各位,我可以编写和分析一堆PHP应用程序来解决这个问题,但

一位更资深的PHP程序员向我解释说,使用PHP数组效率低下,因为它会导致额外的数据复制。然后他解释说,通过创建类来保存数据,甚至数组,可以减少内存消耗,提高性能。这样,PHP就不会像在数组数组中那样被迫在类中复制/深度复制数据

他还解释说,与数组相比,我要寻找的对象更容易在适当的结构化对象树中找到。这我能理解

问题来了,我知道它们有点模糊

  • 在对象上使用数组数组存储数据是否有合适的情况

  • 在对象中存储数据是否总是更节省内存和性能


提前感谢各位,我可以编写和分析一堆PHP应用程序来解决这个问题,但我相信你们中的很多人已经知道答案。

这家伙做了一个测试,看起来没有太大的区别:

这家伙做了一个测试,看起来没有太大的区别:

数组和类不应该混淆。类表示真实世界的实体及其操作。您不应为此目的使用数组。关联数组可能支持该属性,但不支持操作


这三件事的目的——带数字索引的平凡数组、关联数组和对象是不同的。使用更好的套件。现在不要考虑表演。开发软件时,您应该定义需要改进性能的用例。然后开始分析

数组和类不应混淆。类表示真实世界的实体及其操作。您不应为此目的使用数组。关联数组可能支持该属性,但不支持操作


这三件事的目的——带数字索引的平凡数组、关联数组和对象是不同的。使用更好的套件。现在不要考虑表演。开发软件时,您应该定义需要改进性能的用例。然后开始分析

内存消耗/深度复制的差异来自这样一个事实:默认情况下,数组通过值传递给函数(因此,数组被复制),对象通过引用传递。由于您也可以通过引用传递数组(明确声明参数是通过引用传递的-
函数foo(&$bar)
),所以数组和类的内存使用没有太大区别。正如前面所述,必须以语义正确的方式使用数组/对象。PHP不提供
struct
,使用类保存结构化数据通常比使用关联数组更好,因为可以声明有效的实际键。但是选择array vs class的原因并不是性能原因。

内存消耗/深度复制的区别在于,默认情况下,数组是按值传递给函数的(因此,数组是被复制的),而对象是按引用传递给函数的。由于您也可以通过引用传递数组(明确声明参数是通过引用传递的-
函数foo(&$bar)
),所以数组和类的内存使用没有太大区别。正如前面所述,必须以语义正确的方式使用数组/对象。PHP不提供
struct
,使用类保存结构化数据通常比使用关联数组更好,因为可以声明有效的实际键。但是选择array vs class的原因并不是性能原因。

我假设这里的“array”指的是关联数组,而不是具有顺序整数索引的数组。我的意思是,一般来说,更多的数组,我对编程相当陌生,不太确定关联数组和其他数组之间的性能差异。@Eric这种假设产生了巨大的差异。请使用最合适、最容易集成到应用程序体系结构中的方法。如果您的应用程序非常面向对象,请使用对象;如果您可以使它更容易地使用数组,请使用数组。在您的站点无法根据您的需要进行扩展之前,不要担心内存消耗。作为一名高级PHP开发人员,我可以告诉您,对象和数组之间的微小内存差异通常是我最不关心的事情。我假设这里的“数组”指的是关联数组,而不是具有顺序整数索引的数组。我指的是更多的数组,我对编程相当陌生,不太确定关联数组和其他数组之间的性能差异。@Eric这种假设产生了巨大的差异。请使用最合适、最容易集成到应用程序体系结构中的方法。如果您的应用程序非常面向对象,请使用对象;如果您可以使它更容易地使用数组,请使用数组。在您的站点无法根据您的需要进行扩展之前,不要担心内存消耗。作为一名高级PHP开发人员,我可以告诉你,对象和数组之间的微小内存差异通常是我最不想做的事情。有趣的是,我认为这将是一个更大的差异。为什么不运行一个测试,一定很容易设置。有趣的是,我想这会是一个更大的区别。为什么不运行一个测试,一定很容易设置。