Эффективные структуры данных для PHP7

fixxxer

К.О.
Партнер клуба
Гитхаб расширения: https://github.com/php-ds/ds
Статья: https://medium.com/@rtheunissen/efficient-data-structures-for-php-7-9dda7af674cd#.21kca1cnm

PHP has one data structure to rule them all. The array is a complex, flexible, master-of-none, hybrid data structure, combining the behaviour of a list and a linked map. But we use it for everything, because PHP is pragmatic: “dealing with things sensibly and realistically in a way that is based on practical rather than theoretical considerations”. An array gets the job done, even though you wouldn’t study it in a Computer Science course. Unfortunately, with flexibility comes complexity.

The recent release of PHP 7 caused a lot of excitement in the PHP community. We couldn't wait to start using the new features and get a taste of the ~2x performance boost. One of the reasons why it runs that much faster is because the array was redesigned. But it’s still the same structure, “optimised for everything; optimised for nothing” with room for improvement.

“What about the SPL data structures?”

Unfortunately… they’re terrible. They did offer some benefits prior to PHP 7, but have been neglected to the point of having no practical value.

“Why can’t we just fix and improve them?”
We could, but I believe their design and implementation is so poor that it would be better to replace them with something brand new.
“SPL data structures are horribly designed.” — Anthony Ferrara

Introducing: php-ds, a data structure extension for PHP 7.

This post briefly covers the behaviour and performance benefits of each structure. There is also a list of answers to expected questions at the end.

Github: https://github.com/php-ds

Namespace: Ds\

Interfaces: Collection, Sequence, Hashable

Classes: Vector, Deque, Stack, Queue, PriorityQueue, Map, Set
 

fixxxer

К.О.
Партнер клуба
Ты так говоришь, как будто это что-то плохое :)

Ну и почему в Java? Эффективные структуры данных есть в любом взрослом языке.
 

WMix

герр M:)ller
Партнер клуба
штучка темная, библиотечка чужая чуток только смущает, ну да переписать при случае на пхп не составит труда. былоб куда использовать
 

fixxxer

К.О.
Партнер клуба
Скорее, это кандидат на то, чтобы этот репозиторий переехал на git.php.net/php-src в папочку ext/.

Впрочем, я пару раз наблюдал градус дискуссий в похапе-интерналс, и полагаю, что автор если и попробует пропихнуть - вскоре в ужасе убежит.
 

AnrDaemon

Продвинутый новичок
Скорее на замену реализации SPL уже. Чего мелочиться-то.
 

A1x

Новичок
Вот если вообще убрать из ПХП массивы и оставить только структуры типа SPL или этих новых - это ж прийдется сначала думать, а потом кодить, а не наоборот... :D
 

Redjik

Джедай-мастер
графы бы еще, с обходом в глубину/ширину, ну так - до кучи
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
php internals заняты более важными вещами, чем инновации

будем писать как на js
PHP:
foo([
  'bar'=>function(['handler'=>function(){
             return Environment::getValue('bar') === 5 ? true : false;
         }
      ]
     )
  {
    return ['result'=>true];
  }
])
 
Последнее редактирование:

Redjik

Джедай-мастер
@Sufir, в Ларавел внутронности глянь ;)

@grigori, friend-classes нормальная тема кстати, тогда можно Сущности в рамках одного аггрегата ограничивать
 

Adelf

Administrator
Команда форума
@Redjik, френд-классы так себе решение. Мне больше нравится как в C# сделано. Там кроме protected, private есть еще internal. internal - это public для своего namespace и private для всех остальных.
Чето я сегодня C# везде рекламирую... :)
 

fixxxer

К.О.
Партнер клуба
Вот только френд-классы похапешникам дать не хватало. Представляю себе какой будет звиздец.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@Redjik, френд-классы так себе решение. Мне больше нравится как в C# сделано. Там кроме protected, private есть еще internal. internal - это public для своего namespace и private для всех остальных.
Чето я сегодня C# везде рекламирую... :)
Хочу такое. Иногда очень хочется все запрятать, чтобы только потроха знали там друг о дружке, а наружу торчал только некий API, такой стандартненький)
 

Adelf

Administrator
Команда форума
Ну да. Фактически это инкапсуляция на уровне namespace :)
 

fixxxer

К.О.
Партнер клуба
В новомодных ES6 то же самое сделано в виде module exports.
 
Сверху