salient/collections

The collections package of the Salient toolkit

v0.99.65 2024-12-09 13:32 UTC

README

The collections component of the Salient toolkit

Latest Stable Version License CI Status Code Coverage

salient/collections provides classes and traits that allow collections of values to be accessed via array-like objects with chainable methods.

  • Collections are immutable except when array syntax is used to set or unset items1
  • Use Collection<TKey of array-key,TValue> or ListCollection<TValue> with values of any type, or extend them to add type-specific behaviour
  • Remix CollectionTrait, ListCollectionTrait, ReadOnlyCollectionTrait and ReadOnlyArrayAccessTrait for custom behaviour, e.g. to create a strictly immutable collection class
<?php
// The constructor accepts any iterable, including another collection
$foo = new \Salient\Collection\Collection(['foo']);
// Items can be added using array syntax
$foo[] = 'bar';
// Otherwise, the collection is immutable
$foo = $foo->add('baz');
// 'qux' is printed but the collection is unchanged because the result of the
// expression is discarded
$foo->unshift('qux')->sort()->forEach(
    fn($item) =>
        print "- $item" . \PHP_EOL
);
print 'Items in collection: ' . $foo->count() . \PHP_EOL;

Output:

- bar
- baz
- foo
- qux
Items in collection: 3

Documentation

API documentation for salient/collections tracks the main branch of the toolkit's GitHub repository, where further documentation can also be found.