jcrowe / type-safe-collection
A thin wrapper around Illuminate/Collection that allows for enforcing type constraints on the collection elements
Installs: 9 189
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 4
Open Issues: 0
Requires
- php: >=7.0
- illuminate/support: ^7.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 4.8.*
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-11-06 04:39:36 UTC
README
TypeSafeCollection is a thin wrapper around Illuminate's Collection object that allows for easy enforcement of type protection in your collections.
use JCrowe\TypeSafeCollection\TypeSafeCollection; class MovieLibrary extends TypeSafeCollection { // list of classes that can be added to the collection protected $allowedClasses = [Watchable::class, Rentable::class]; } $myLibrary = new MovieLibrary([ new WatchableMovie(), new RentableDVD(), new ReadableBook() // throws \InvalidArgumentProvided exception ]); $myLibrary = new MovieLibrary(); $myLibarry->push(new RentableDVD()); $myLibrary->push(new ReadableBook()); // throws \InvalidArgumentProvided exception
Custom checks
class MovieLibrary extends TypeSafeCollection { // list of classes that can be added to the collection protected $allowedClasses = [Watchable::class, Rentable::class]; // this function will be called whenever a new // element is being added to the collection protected function onAddNewElement($element) { if (!$element->isAvailable()) { return false; // or throw exception } } }
Ignore invalid types and do not throw exception
class MovieLibrary extends TypeSafeCollection { // list of classes that can be added to the collection protected $allowedClasses = [Watchable::class, Rentable::class]; // if set to true no exception will be thrown when // attempting to add an invalid value. protected $ignoreInvalidElements = true; } $myLibrary = new MovieLibrary(); $myLibrary->put('my_rentable', new RentableDVD()); $myLibrary->get('my_rentable'); // RentableDVD object $myLibrary->put('my_readable', new ReadableBook()); // no exception is thrown $myLibrary->get('my_readable'); // null
Installation
composer require jcrowe/type-safe-collection
{ "require": { "jcrowe/type-safe-collection": "~1.0" } }