Подтвердить что ты не робот

PHP SPL, стоит ли использовать функции raw-массива лучше?

Я изучаю стандартную библиотеку PHP (SPL). Раньше я использовал только массивы и только теперь обнаружил, что у PHP столько стандартных классов. Но в руководстве нет никаких слов, рекомендуется ли это использовать или нет. Например, они явно рекомендуют использовать конструкцию foreach для итерации массивов, поскольку она выполняется быстрее. А как насчет этой библиотеки? Если мне нужно сохранить некоторые данные в объекте, я должен использовать какой-то конкретный класс SPL для моей ситуации или, во всяком случае, лучше использовать стандартные массивы?

4b9b3361

Ответ 1

На ваш вопрос много. Должны ли вы использовать структуры данных SPL? Это зависит.

Массив PHP может действовать как карта, связанный список или массив. Очень редко вы действительно хотите, чтобы один тип данных действовал как все эти вещи одновременно, поэтому сфокусированный характер типов данных SPL не так ограничивает. Фактически, большинство "аутсайдеров" (и некоторые "инсайдеры" ) рассматривали бы PHP-массив пародией.

Основным недостатком массива PHP является то, что он использует много памяти. Даже если вам нужен только фиксированный, последовательный, индексированный массив, у вас есть накладные расходы на связанные вещи и хранение ключей. Несмотря на это, массив PHP обычно намного быстрее, чем типы объектов, если вы в основном добавляете данные и итерации по нему, возможно, потому что функция вызывает замедление работы.

Как правило, я не вижу, чтобы многие люди использовали структуры данных SPL. В основном, я думаю, потому что в контексте PHP и веб-приложений они, как правило, не очень применимы. Обычно вы имеете дело с небольшими массивами, где удобство встроенных операторов и функции массива перевешивают любые преимущества типов SPL.

Это сказало:

  • Если вы находите себя в ситуации, когда вы используете массив в качестве связанного списка (вставка/удаление в середине), попробуйте один из SPL дважды связанных списков.

  • Если вы обнаружите, что используете большой индексированный массив, попробуйте SPLFixedArray. Они, безусловно, потребляют гораздо меньше памяти.

  • Если вам нужна карта с объектами в качестве ключа, используйте SplObjectStorage (поскольку массив PHP не работает с объектными ключами).

  • Если вы хотите сохранить данные, упорядоченные в массиве, попробуйте одну из кучек.

Сравнивать собственный массив с объектом SPL и использовать тот, который имеет комбинацию памяти + скорость + простоту, которая вам подходит.