В 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.
ИМХО это пришло слишком поздно.