jcrowe206 / type-safe-collection by jcrowe206

A thin wrapper around Illuminate/Collection that allows for enforcing type constraints on the collection elements
9,176
4
1
Package Data
Maintainer Username: jcrowe206
Maintainer Contact: jcrowe206@gmail.com (Jonathan Crowe)
Package Create Date: 2015-09-29
Package Last Update: 2020-05-05
Language: PHP
License: MIT
Last Refreshed: 2024-04-17 15:05:35
Package Statistics
Total Downloads: 9,176
Monthly Downloads: 2
Daily Downloads: 0
Total Stars: 4
Total Watchers: 1
Total Forks: 4
Total Open Issues: 0

TypeSafe Collections

Build Status Coverage Status

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"
    }
}