Spl vs. Array: когда мы должны использовать SPL и когда мы должны использовать массив в PHP?

StackOverflow https://stackoverflow.com/questions/3166405

  •  02-10-2019
  •  | 
  •  

Вопрос

В 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top