SPL与数组:我们什么时候应该使用SPL,什么时候应该在PHP中使用数组?
题
在Java和C ++中,当我们不知道尺寸时 - 数组不像PHP中使用,而是使用LinkedList等。
在PHP中存在SPL,但是大多数时候,程序员使用数组,为什么(因为人们不了解SPL)?
当我们应该在PHP和何时使用阵列时,PHP和Java/C ++之间有什么区别?
解决方案
每个PHP请求都必须初始化所有变量,并在请求释放后。因此,不常见的情况下,特殊数据结构(例如Maxheap,LinkedList或队列)比数组更有效。同样,阵列更容易理解和用于初学者。
与PHP中C ++的差异是阵列长度是动态的。您可以随时添加元素。
$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的元素,然后将其添加为元素到Array $ arr。
$arr[][]=5;
在PHP阵列中是哈希表,因此您不仅可以拥有整数键,还可以拥有字符串:
$arr['somekey']='somevalue';
如果数组元素是整数,则每个元素需要一个值16字节的值结构(ZVAL)。还需要一个哈希桶 - 需要36个字节。这给出了每个值52个字节。内存分配标题另外8个字节*2-给出68个字节。
关于PHP中的数组: http://oreilly.com/catalog/progphp/chapter/ch05.html
其他提示
您要我们比较两个 大量 不同的事情,几乎唯一的相似性是PHP中可用的(阵列和SPL)。
为此,直接比较或开处方的时候,当两个都可以使用两者都可以用来完成任务的时间时,将是荒谬的。在此注意, 两个都 可以使用交织在一起:例如,使用 ArrayIterator
迭代阵列或 ArrayObject
使用对象时使用数组式语法。
您似乎也对SPL是什么感到困惑,或者不清楚。当然 不是 仅限于用于迭代事物的工具。您的意思是询问图书馆的特定部分,还是您可能不清楚其中有什么可用?
使用标准数组,它比ArrayObject快。
仅使用ArrayObject使用您的自定义方法实现自己的指定数组。
也许不一定是混乱,因为人们可以决定使用“ splstack”,而不是与Array_push/pop函数关联的香草阵列。或以经典方式使用数组
然后存在spldoublylinkedlist,Splqueue,splheap。加上arrayObject。
因此,问题是有效的。答案是:您以更爪正在的方式做同样的事情,而且速度较慢。
SPL通常是模仿标准和“现成”类和API的暂定性,就像C ++和Java中存在一样。
恕我直言,为时已晚。