dashifen/collection

An abstract object from which concrete collections can be built.

Installs: 3 750

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 0

Open Issues: 0

Type:project

3.0.0 2023-09-02 17:16 UTC

This package is auto-updated.

Last update: 2024-05-01 00:11:39 UTC


README

An abstract object from which concrete collections can be built.

Installation

composer require dashifen/collection

Usage

Included herein is an abstract class, AbstractCollection which implements a CollectionInterface. That interface extends both Iterator and ArrayAccess, the methods of which are implemented by AbstractCollection. Thus, extending this object for your own purposes will allow you to create your own collection that responds like an array within foreach loops and can be accessed using the [] operator.

Example

While the AbstractCollection object implements all of the methods of its interface, it may be beneficial to override some of them in order to type hint parameters and return values throughout. In the following example, we assume a Movie object has been defined and that the indices within our collection of movies are their titles, i.e. the collection is an associative array.

class MovieCollection implements AbstractCollection 
{
    public function current(): Movie 
    {
        return current($this->collection);
    }

    public function key(): ?string 
    {
        return key($this->collection);
    }

    public function valid(): bool 
    {
        return is_string($this->key());
    }

    public function offsetGet ($offset): ?Movie
    {
        return $this->collection[$offset] ?? null;
    }

    public function offsetSet ($offset, $value): void
    {
        if (!($value instanceof Movie)) {
            throw new Exception('Collection value must be a Movie');
        }

        $this->collection[$offset] = $value;
    }
}