SPL против массива: когда следует использовать SPL и когда мы должны использовать Array в PHP?

В java и C ++, когда мы не знаем размер – массив, который не используется как в PHP, вместо этого используется linkedList и т. Д.

В PHP существует SPL, но в большинстве случаев программисты используют массив, почему (потому что люди не знают о SPL)?

Когда мы должны использовать Array в PHP и whenSPL и в чем разница в этом случае между PHP и Java / C ++?

Каждый PHP-запрос должен инициализировать все переменные и после запроса их освободить. Из-за этого нередко возникают ситуации, когда специальные структуры данных (например, maxheap, связанный список или очередь) более эффективны, чем массивы. Также массивы гораздо проще понять и использовать для новичков.

Отличие от 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

Вы просите нас сравнить две совершенно разные вещи, почти единственное сходство в том, что они оба (массивы и SPL) доступны в PHP.

С этой целью было бы совершенно бессмысленно сравнивать напрямую или предписывать, когда нужно использовать друг друга в те моменты, когда оба могут быть использованы для выполнения задачи. В этой заметке оба ArrayIterator могут быть переплетены: например, используя ArrayIterator для итерации по массиву или ArrayObject чтобы использовать синтаксис стиля массива при работе с объектами.

Вы также, кажется, смущены или просто неясны, о том, что такое SPL; это, конечно , не ограничивается инструментами, используемыми для перебора коллекций вещей. Вы хотели спросить об определенных частях библиотеки, или вы, возможно, просто неясны, что доступно в нем?

Используйте стандартные массивы, это быстрее, чем ArrayObject.

Используйте ArrayObject только для реализации ваших собственных заданных массивов с помощью ваших собственных методов.

Не обязательно, может быть, путаница, потому что люди могут решить использовать «SplStack» вместо ванильного массива, связанного с функциями array_push / pop. Или используйте массивы классическим способом,

а затем существуют SplDoublyLinkedList, SplQueue, SplHeap. плюс ArrayObject.

Таким образом, вопрос верен. И ответ таков: вы делаете то же самое более явным образом, и это медленнее.

SPL, вообще говоря, является предварительным для подражания стандартным и «готовым» классам и API, например, существуют в C ++ и Java.

ИМХО это пришло слишком поздно.