Spl vs. Array: когда мы должны использовать SPL и когда мы должны использовать массив в PHP?
Вопрос
В Java и C ++, когда мы не знаем размер - массив не используется в PHP, вместо этого используется LinkedList и т. Д.
В PHP существуют SPL, но большинство временных программистов используют массив, почему (потому что люди не знают о SPL)?
Когда мы должны использовать массив в PHP и WHENSPL и в чем разница в этом случае между PHP и Java / C ++?
Решение
Каждый запрос PHP должен инициализировать все переменные и после запроса они освобождены. Из-за этого не часто приходит ситуация, когда специальные структуры данных (например, Maxheap, LinkedList или очередь) более эффективны, чем массив. Также массивы намного проще понимать и использовать для начинающих.
Разница от 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
итерации за массив или ArrayObject
Использовать синтаксис стиля массива при работе с объектами.
Кажется, вы также смущены или просто неясните, о чем SPL; Это наверняка не является Ограничено инструментами, используемыми для случаев итерации над коллекциями вещей. Вы имели в виду спросить о конкретных частях библиотеки, или вы, возможно, просто неясно, что доступно в нем?
Используйте стандартные массивы, это быстрее, чем arrayobject.
Используйте ArrayObject только для реализации ваших собственных заданных массивов с вашими пользовательскими методами.
Необходимость путаницы может быть, потому что люди могут решить использовать «SplStack» вместо ванильного массива, связанного с функциями Array_Push / POP. Или использовать массивы классическим способом,
А потом существует spdoublickedList, bluqueue, splheap. плюс arrayobject.
Таким образом, вопрос действителен. И ответ: вы делаете то же самое в более Javaish Way, и он медленнее.
SPL Вообще говоря, представляет собой предварительную к имитирующему стандарту и API и API «Off-Folded», например, в C ++ & Java.
ИМХО, это пришло слишком поздно.