在PHP中使用正确的数组

时间:2012-05-20 18:14:29

标签: php arrays performance oop multidimensional-array

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

他还解释了我要寻找的对象在一个合适的结构化对象树中比在一个数组数组中更容易找到。我可以理解。

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

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

  • 将数据存储在对象中是否总能获得更高的内存和性能?

非常感谢大家,我可以编写和分析一堆PHP应用程序来解决它,但我相信很多人已经知道了答案。

3 个答案:

答案 0 :(得分:1)

这家伙做了一个测试,似乎差别不大:http://www.rooftopsolutions.nl/blog/148

答案 1 :(得分:1)

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

这三个事物与数字索引,关联数组和对象的简单数组的目的不相同。使用更好的套件。现在不要考虑性能。在开发软件时,您应该定义需要提高性能的用例。然后开始分析。

答案 2 :(得分:1)

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