chris-kruining / utilities
Utilities for PHP 7.1 and up
Requires
- php: >=7.4.0
- composer/composer: 2.2.6
- nesbot/carbon: 2.56.0
- psr/container: ^1 || 2.0.2
Requires (Dev)
- phpspec/phpspec: 7.1.0
Provides
This package is auto-updated.
Last update: 2023-09-27 18:01:26 UTC
README
Utilities
some utilities for php, nothing special, nothing new, just to my taste
Installation
installation is simply done via composer
composer require chris-kruining/utilities
Usage
The main component of the library is the Collection at the moment. The goal of the Collection is to provide a object oriented interface for array functions. It also has a couple of extra's like method chaining and linq-esc implementation(NOT DONE YET) so that you may interact with the Collection as if it was a database table
for example
CPB\Utilities\Collections\Collection::from([ 'these', 'are', null, null, 'some', null, 'test', 'values', null ]) ->filter() ->toString(' ');
would yield
'these are some test values'
which is the same as
join(' ', array_filter([ 'these', 'are', null, null, 'some', null, 'test', 'values', null ]));
I agree, the vannilla way is shorter now but the strength really comes into play when we start adding callbacks and increase the chain length
CPB\Utilities\Collections\Collection::from([ 'these', '', '', 'are', null, 'some', null, 'test', '', 'values', '' ]) ->filter(fn($v) => $v !== null && strlen($v) > 0) ->map(fn($k, $v) => $k . '::' . $v) ->toString('|');
would yield
'0::these|1::are|2::some|3::test|4::values'
which is the same as
$filtered = array_filter( [ 'these', '', '', 'are', null, 'some', null, 'test', '', 'values', '' ], fn($v) => $v !== null && strlen($v) > 0 ); join('|', array_map(fn($k, $v) => $k . '::' . $v, array_keys($filtered), $filtered));
As you can see the collection version maintains readability whereas the vannilla version loses in my opinion it's charm because to achieve a single goal you need to spread it out over multiple variables
Roadmap
- Implement basic features to
Collection - Bloat
Collectionwith features :P - Split of features into an inheritance tree
- Split lazy mode from
CollectionintoLazyCollectionand implement PHP's array functions as generators - Finish inheritance structure
- Implement
LazyCollection - (Better) implement the
Queryableinterface in a new class so theCollectiondoesn't become bloated