[#] [Перевод] Эффективные структуры данных для PHP 7
habrabot(difrex,1) — All
2016-03-28 19:30:02


PHP имеет всего одну структуру данных для управления всем. `array` — сложный, гибкий, гибридный, сочетает в себе поведение `list` и `linked map`. Но мы используем его для всего, потому что PHP придерживается **прагматичного подхода**: иметь предельно правильный, здравый и реалистичный способ решения проблемы, исходящий из практических, а не теоретических рассуждений. `array` позволяет делать работу, хотя о нем и так много рассказывают на лекциях по информатике. Но, к сожалению, с гибкостью приходит и сложность. Последний релиз PHP вызвал большое оживление в сообществе. Мы не могли дождаться того, чтобы начать использовать [новые возможности][1] и почувствовать вкус [~2х прироста производительности][2]. Одна из причин, почему это случилось — [структура `array` была переработана][3]. Но массивы все также придерживаются принципа «оптимизировано для всего; оптимизировано для ничего», еще не все идеально, есть возможности для совершенствования.

> А что насчет
>
> [структур данных SPL?][4]

К сожалению… они ужасны. Раньше, до PHP7, они предлагали \_некоторые\_ преимущества, но сейчас мы дошли до точки, когда использование SPL не имеет практического смысла.

> Почему мы не можем просто поправить и улучшить их?

Да, мы могли бы, но я считаю, что их дизайн и реализация настолько бедны, что лучше бы найти более современную замену.

> **_«SPL data structures are horribly designed.»_**
>
>
>
> —
>
> _Anthony Ferrara_
>
>



----

**Введение**: `php-ds` — расширение для PHP7, добавляющее структуры данных. Этот пост кратко охватывает поведение, производительность и преимущества каждой из них. Также в конце вы найдете список ответов на ожидаемые вопросы. **Github**: **Пространство имен:** `Ds\` **Интерфейсы:** `Collection`, `Sequence`, `Hashable` **Классы:** `Vector`, `Deque`, `Stack`, `Queue`, `PriorityQueue`, `Map`, `Set` [Читать дальше →][5]

[1]: http://php.net/manual/en/migration70.new-features.php
[2]: https://www.reddit.com/r/PHP/comments/3q2brz/how_is_php_7_twice_as_fast/
[3]: https://nikic.github.io/2014/12/22/PHPs-new-hashtable-implementation.html
[4]: http://php.net/manual/en/spl.datastructures.php
[5]: https://habrahabr.ru/post/280262/#habracut