chris-kruining/utilities

This package is abandoned and no longer maintained. No replacement package was suggested.

Utilities for PHP 7.1 and up

0.2.32 2022-02-17 10:09 UTC

README

Latest Stable Version Latest Unstable Version License Maintainability Test Coverage SensioLabsInsight

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 Collection with features :P
  • Split of features into an inheritance tree
  • Split lazy mode from Collection into LazyCollection and implement PHP's array functions as generators
  • Finish inheritance structure
  • Implement LazyCollection
  • (Better) implement the Queryable interface in a new class so the Collection doesn't become bloated