SPL与数组:在PHP中什么情况下应该使用SPL,什么情况下应该使用数组?

8

在Java和C++中,当我们不知道大小时 - 不像PHP一样使用数组,而是使用linkedList等。

在PHP中存在SPL,但大多数情况下程序员使用数组,为什么(因为人们不知道SPL)?

在PHP中应该何时使用数组,何时使用SPL,在这种情况下PHP和Java/C++之间的区别是什么?


4个回答

4
每个PHP请求都必须初始化所有变量,并在请求后释放它们。因此,很少出现特殊数据结构(如maxheap、linkedlist或queue)比数组更有效的情况。
此外,对于初学者来说,数组更加简单易懂且易于使用。
与C ++不同的是,PHP中数组的长度是动态的。您可以随时添加元素。
$arr=array();
$arr[]=5; //add integer to array
echo count($arr); //1
$arr[]=7;
echo count($arr); //2

您可以动态创建并将数组添加到另一个数组中。
$arr[]=array();
$arr[2][]=5;
echo count($arr); //3
echo count($arr[2]); //1

这将创建一个新的数组,添加值为5的元素,并将其作为元素添加到数组$arr中。
$arr[][]=5;

在PHP中,数组是哈希表,因此您不仅可以有整数键,还可以有字符串键:

$arr['somekey']='somevalue';

如果数组元素是整数,则每个元素需要一个值结构(zval),占用16个字节。还需要一个哈希桶,占用36个字节。这样每个值就需要52个字节。内存分配头部再占用8个字节*2,共计68个字节。
关于PHP中的数组:http://oreilly.com/catalog/progphp/chapter/ch05.html

动态 PHP 数组意味着每次插入新元素时都会创建一个新数组。例如,PHP 数组具有默认大小,如 100 个单元格,如果数组需要超过 100 个单元格,则通过乘以 2 等方式增加。 - Ben
每次创建新元素时,都会分配变量的新内存和哈希的新内存。 - codez

1

使用标准数组,它比ArrayObject更快。

仅在实现具有自定义方法的指定数组时使用ArrayObject。


5
为什么“它更慢”总是成为反对某事的首要论据? - salathe
1
请查看此评论以获取基准测试:http://www.php.net/manual/pt_BR/class.arrayobject.php#90371。在重型应用程序中,性能是非常重要的参数,抱歉。 - silent

1
您要求我们比较两个非常不同的东西,几乎唯一的相似之处是它们都可以在PHP中使用(数组和SPL)。因此,直接进行比较或指定在什么情况下应该使用其中一个来完成任务几乎没有意义。值得注意的是,这两者可以交织使用:例如,使用ArrayIterator来迭代数组,或者使用ArrayObject在处理对象时使用类似于数组的语法。您似乎也有些困惑或不太清楚SPL是什么;它肯定不仅限于用于迭代各种事物的工具。您是否想询问库中的特定部分,或者只是不太清楚它提供了哪些功能?

我觉得我对SPL有点困惑。 - Ben

0

这并不一定是混淆,因为人们可以决定使用"SplStack"而不是与array_push/pop函数相关联的普通数组。或者以经典方式使用数组,

然后存在SplDoublyLinkedList、SplQueue、SplHeap以及ArrayObject。

所以问题是合法的。答案是:你可以用更Java风格的方式做同样的事情,但速度会慢一些。

SPL总体上是试图模仿标准和“现成”的类和API,就像C++和Java中存在的那样。

在我看来,它来得太迟了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接