Я изучаю стандартную библиотеку PHP (SPL). Раньше я использовал только массивы и только сейчас обнаружил, что в PHP так много стандартных классов. Но в инструкции нет ни слова о том, рекомендуется его использовать или нет. Например, они явно рекомендуют использовать конструкцию foreach
для перебора массивов, потому что это быстрее. А что с этой библиотекой? Если мне нужно сохранить некоторые данные в объекте, должен ли я использовать какой-то конкретный класс SPL для моей ситуации или в любом случае лучше использовать стандартные массивы?
PHP SPL, стоит ли использовать или лучше использовать необработанные функции массива?
Ответы (1)
В вашем вопросе многое. Следует ли вам использовать структуры данных SPL? Это зависит.
Массив PHP может действовать как карта, связанный список или массив. Очень редко вам действительно нужен один тип данных, который действует как все эти вещи одновременно, поэтому сфокусированный характер типов данных SPL не так уж ограничивает. Фактически, большинство "аутсайдеров" (и некоторые "инсайдеры") сочли бы массив PHP пародией.
Основным недостатком массива PHP является то, что он использует много памяти. Даже если вам просто нужен фиксированный, последовательный, индексированный массив, у вас есть накладные расходы на связывание вещей и хранение ключей. Несмотря на это, массив PHP обычно намного быстрее, чем типы объектов, если вы в основном добавляете данные и перебираете их, вероятно, потому, что вызовы функций замедляют работу.
Как правило, я не вижу, чтобы многие люди использовали структуры данных SPL. В основном, я думаю, потому что в контексте PHP и веб-приложений они обычно не очень применимы. Обычно вы имеете дело с небольшими массивами, где удобство встроенных операторов и функций массива перевешивает любые преимущества типов SPL.
Это сказало:
Если вы оказались в ситуации, когда вы используете массив как связанный список (вставка/удаление посередине), то попробуйте один из двусвязных списков SPL.
Если вы обнаружите, что используете большой индексированный массив, попробуйте
SPLFixedArray
. Они определенно будут потреблять гораздо меньше памяти.Если вам нужна карта с объектами в качестве ключа, используйте
SplObjectStorage
(поскольку массив PHP не работает с ключами объектов).Если вы хотите, чтобы данные были упорядочены в массиве, попробуйте одну из куч.
Сравните нативный массив с объектом SPL и используйте тот из них, который предлагает компромисс между памятью, скоростью и простотой, который вам подходит.